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 :
- 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 :
- <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 :
- <?
- //$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 :
- <?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 :
- <?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 ...
---------------
la vie à le goût qu'on lui donne !! Vive le photo numérique et le tirage photo