Rafraichissment avec ajax des listes déroulantes

Fermé
rorita - Modifié par rorita le 2/06/2014 à 15:45
BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 - 4 juin 2014 à 00:28
Bonjour,
J'ai un problème avec mon code javascript/ajax.
En fait, j'utilise une requête ajax pour recuperer des valeurs de ma base de données puis de les afficher dans une liste déroulante où l'utilisateur sélectionnera le numéro de l'étage pour afficher l'image du plan correspondante.
Mon interface contient deux listes déroulantes la première permet à l'utilisateur de choisir le lieu.
La deuxième lui permet de sélectionner l'étage correspondant et en cliquant sur "OK" à la fin du formulaire l'image du plan du lieu et de l'étage qui les a choisi s'affichera!
Mon problème est que lorsque je mets ma fonction choix_plan() [qui envoie les requêtes au PHP pour récupérer les valeurs de l'étage] dans la balise form! tout fonctionne comme je veux! c'est à dire après avoir choisi le lieu, la liste déroulante des étages s'affiche pour donner la main à l'utilisateur. Sauf qu'en cliquant sur la valeur de l'étage , le code prend en considération la valeur choisie mais non seulement la liste ne change pas de valeur mais aussi les mêmes valeurs des étages déjà affichées se rajoutent à la liste à chaque clic.
Je n'ai pas compris l'origine du problème. Quelqu'un peut m'aider svp je suis vraiment bloquée? Merci

Voilà mon code HTML:

<div id="myDiv2">

<form id="form2" name="form2" onchange="choix_lieu()">
<fieldset id="field1" style="width:200px;color:#F5DA81">
<div align="center" ><legend style="font-weight:bold; color:#F5DA81">Choix du plan</legend></div><br>

<select name="liste_place" id="liste_place" >
<?php
include('../php/liste_place.php');
?>
</select>
<select name="liste_etage" id="liste_etage">
</select>

</fieldset>
<div>
<input type="submit" value="ok" id="envoyer_choix"></div>
</div>
</form>
</div>



et mon code javascript:
function choix_lieu(){
var xmlhttp1;

if (window.XMLHttpRequest){
xmlhttp1=new XMLHttpRequest();

}

else
{
xmlhttp1=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp1.onreadystatechange=function(){
if (xmlhttp1.readyState==4 && xmlhttp1.status==200){
console.log(xmlhttp1);
reponse=xmlhttp1.responseText;
console.log(reponse);
tab_etage=reponse.split('<br/>');

var option1=document.createElement("option");
texte=document.createTextNode("Veuillez choisir l'étage correspondant:");
option1.appendChild(texte);
valeur_option1=option1.setAttribute("value",texte);
affichage_liste_etage.appendChild(option1);
affichage_liste_etage.selectedIndex="0";

for(var j=0;j<tab_etage.length-1;j++){
console.log(tab_etage[j]);
var option=create_options(tab_etage[j]);
affichage_liste_etage.appendChild(option);
}
}


}

xmlhttp1.getAllResponseHeaders();
xmlhttp1.open("POST","http://www.closycom.com/roua/dossier_client/php/liste_etage.php",true);
xmlhttp1.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp1.send("lieu_selectionne="+lieu_selectionne);
}



1 réponse

BlackYoup Messages postés 181 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 10 juin 2014 20
4 juin 2014 à 00:28
Salut,

Donc pour ton problème de rajout de résultats à la liste des étages lors de chaque sélection c'est normal puisque tu as mis la fonction choix_lieux() dans le onchange du <form> donc elle sera déclenchée dès que ton formulaire à une donnée qui change. Ce serait mieux de le mettre dans le <select id="liste_place">

De plus, ta variable lieu_selectionne n'est pas déclarée, ou alors elle n'est pas dans l'exemple

Au passage: for(var j=0;j<tab_etage.length-1;j++) ne te parcourra pas tous les éléments de ton tableau, il s'arrêtera à : i < n-2 (ou n est le nombre retournée par .length), enlève le -1 ou utilise la fonction array.forEach()

Voila pour ca en premier, je sais pas si ca va corriger tes problèmes, tient nous au courant :)
0