[AJAX] 3 listes attachées ! ID non accessible !
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:
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...
:evilred:
edit :
voyez vous meme ...
http://www.jantes-alu.com/tst/index.php
voici mon code :
Javascript
Code:
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:
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:
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:
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 ...