Bonjour,


je me lance doucement dans l'ajax, et je commence a prendre consciences de sa puissance, par contre je bloque sur une 3 listes chainées entre elles ...

lorsque ma seconde est remplie l'id du select semble inaccessible, et donc j'ai un probleme d'acces a l'objet de la seconde liste générée par ajax,

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
sel = document.getElementById('modele');
idmodele = sel.options[sel.selectedIndex].value;
la j'ai un message d'erreur sel.options a la valeur nul ou n'est pas un objet,

lorsque j'affiche le code source je n'appercois pas la liste générée en ajax ! donc je n'arrive pas a débugger...



edit :
voyez vous meme ...
http://www.jantes-alu.com/tst/index.php





voici mon code :


Javascript
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
 
<script type='text/javascript'>
 
			function getXhr(){
                                var xhr = null; 
				if(window.XMLHttpRequest) // Firefox et autres
				   xhr = new XMLHttpRequest(); 
				else if(window.ActiveXObject){ // Internet Explorer 
				   try {
			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
			            } catch (e) {
			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
			            }
				}
				else { // XMLHttpRequest non supporté par le navigateur 
				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
				   xhr = false; 
				} 
                                return xhr;
			}
 
			/**
			* Méthode qui sera appelée sur le click du bouton
			*/
			function go(){
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						// On se sert de innerHTML pour rajouter les options a la liste
						document.getElementById('modele').innerHTML = leselect;
					}
				}
 
				// Ici on va voir comment faire du post
				xhr.open("POST","scripts/agax_listerecherchemodele.php",true); 
				// ne pas oublier ça pour le post
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				// ne pas oublier de poster les arguments 
				// ici, l'id 
				sel = document.getElementById('marque');
				idmarque = sel.options[sel.selectedIndex].value;
 
 
 
				xhr.send("idMarque="+idmarque);
 
			}
 
			function gotst(){
				alert("tst");
				sel = document.getElementById('modele');
				idmodele = sel.options[sel.selectedIndex].value;
				}
 
			function go_type(){
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						// On se sert de innerHTML pour rajouter les options a la liste
						document.getElementById('type').innerHTML = leselect;
					}
				}
 
				// Ici on va voir comment faire du post
				xhr.open("POST","scripts/agax_listerecherchetype.php",true); 
				// ne pas oublier ça pour le post
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				// ne pas oublier de poster les arguments 
				// ici, l'id 
				sel = document.getElementById('modele');
				idmodele = sel.options[sel.selectedIndex].value;
 
 
 
				xhr.send("idModele="+idmodele);
 
 
			}			
		</script>
Mes listes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
 
		<?
			//$req="select * from voiture_marque where visible = 1 order by id ASC";
			//$req="SELECT DISTINCT MARQUE, ID FROM `database` GROUP BY MARQUE ";
 
			$req="SELECT DISTINCT MARQUE  FROM `database` WHERE 1";
			$bdd->setQuery($req);
			$rescar = $bdd->executeQuery();
		?>
        <select name="marque"  title="Constructeurs automobiles" class="rechercheliste"  onchange="go();">
          <option value="-1" selected="selected">Marque</option>
          <?
 	 for($i=0;$i<sizeof($rescar);$i++){
		if($rescar[$i][0]!=""){
		 ?>
          <option  value="<? echo $rescar[$i][0]; ?>" ><? echo stripslashes(nl2br($rescar[$i][0])); ?></option>
          <?
			}
		}  
			?>
          </select>
 
 
	    <div id='modele' style='display:inline'>
	      <select name="modele" id="modele" title="Modeles automobiles"  class="rechercheliste">
	        <option value='-1'>Modèle</option>
	      </select>
	      </div>
 
	    <div id='type' style='display:inline'>
	      <select name="type" id="type" title="Type automobiles"  class="rechercheliste" >
	        <option value='-1'>Type</option> 
	        </select>
	      </div>
agax_listerecherchemodele.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
<?php
 
include ("../tpl/ho.php");
//connexion
 
        echo "<select name='modele' id='modele' class='rechercheliste' OnChange='gotst()'>";
 
if(isset($_POST["idMarque"])){
        
        $idmarque=$_POST["idMarque"];   
//      $idmarque=6;
        //$req="select * from voiture_modele where IDMARQUE = ".$idmarque." and visible = 1 order by id ASC";
        $req="SELECT DISTINCT MODELE FROM `database` WHERE MARQUE = '$idmarque' ";
        $bdd->setQuery($req);
        $res = $bdd->executeQuery();
 
 
        for($i=0;$i<sizeof($res);$i++){
                        echo "<option value='".stripslashes($res[$i][0])."'>".stripslashes($res[$i][0])."</option>";
                }
}else{
        echo "<option value='-1'>Modèle</option>";
        }
        echo "</select>";
 
?>

agax_listerecherchetype.php
(la requette n'est pas a jour mais de tte facon l'ajax n'ajax pas !)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
<?php
 
include ("../tpl/ho.php");
 
        
        
if(isset($_POST["idModele"])){
        
        $idmodele=$_POST["idModele"];   
//      $idmarque=6;
        //$req="select * from voiture_modele where IDMARQUE = ".$idmarque." and visible = 1 order by id ASC";
        
        $req="SELECT DISTINCT MODELE FROM `database` ";
        $bdd->setQuery($req);
        $res = $bdd->executeQuery();
 
 
        echo "<select name='type' id='type' class='rechercheliste'>";
        
        for($i=0;$i<sizeof($res);$i++){
                        echo "<option value='".$res[$i][0]."'>".stripslashes($res[$i][0])."</option>";
                }
        
        echo "</select>";
        
        }
?>

J'ai une erreur sel.option a la valeur null ou n'est pas un objet
et lorsque j'affiche la source forcément ma liste n'apparait pas .... donc je ne peux pas débugger ...