Listes déroulantes liées

flogood -  
 flogood -
Bonjour,
Bonjour !
J'ai un petit problème avec Ajax, et comme je ne maitrise pas trés bien je viens vous demandez de l'aide !
C'est pour créer 2 listes déroulantes liées.

J'ai fait un alert de xhr.responseText, et le message suivant apparait :

<select nom="cont" id="cont"><option value ="1">Machin</option>

Mais le problème c'est que ma deuxième liste déroulante ne reçoit pas cette ligne.

Voila le code :

<!-- nouvetu.inc -->

<html>
<head>
<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 XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
/**
* Méthode qui sera appelée sur le click du bouton
*/
function change(){
var xhr = getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function() {
//alert(xhr.readyState);
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
//alert(xhr.readystate);
//alert(xhr.status);
if(xhr.readyState == 4 && xhr.status == 200){
di = document.getElementById('cont');
di.innerHTML = xhr.responseText;
alert(xhr.responseText);
}
}
// Ici on va voir comment faire du post
xhr.open("POST","includes/ajaxcont.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
identreprise = document.getElementById('entre').options[document.getElementById('entre').selectedIndex].value;
//alert(identreprise);
xhr.send("num_entr="+identreprise);
}
</script>
</head>
<body>
<center><font color = "navy" size = "5">Ajout d'un nouvel apprenti</font></center>
<form method="POST" action="index.php?lien=ajout">
<table>
[...]
<td>Entreprise :</td>
<td><select name='entre' id='entre' onchange='change()'>
<option value='-1'>Choisisez une entreprise</option>
<?
mysql_select_db("lyceecon0");
$res = mysql_query("SELECT num_entr,nom_entre FROM entreprise ORDER BY nom_entre");
while($row = mysql_fetch_assoc($res))
{
echo "<option value='".$row["num_entr"]."'>".$row["nom_entre"]."</option>";
}
?>
</select></td>
<td></td>
<td>Contact :</td>
<div id='cont' style='display:inline'>
<td><select name='cont' id = 'cont'>
<option value='-1'>Choisisez un Contact</option>
</select></td>
</div>
</tr>
</table>

et l'autre fichier

<!-- ajaxcont.php-->
<?php
mysql_connect("localhost","root","");
mysql_select_db("lyceecon0");
echo '<select name="cont" id = "cont">';
if(isset($_POST["num_entr"]))
{
$res = mysql_query("SELECT num_pers,nom_pers FROM personnel WHERE num_entr=".$_POST["num_entr"]." ORDER BY nom_pers");
while($row = mysql_fetch_assoc($res))
{
if ($row)
{
echo '<option value="'.$row["num_pers"].'">'.$row["nom_pers"].'</option>';
}
}
}
else
{
echo "<option value='-1'>Choisir un contact</option>";
echo "</select>";
}
?>

Merci d'avance !

1 réponse

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
Bonjour,

dans la partie de la page où tu veux afficher ta deuxième liste tu ne dois pas mettre tout ça:


<td></td>
<td>Contact :</td>
<div id='cont' style='display:inline'>
<td><select name='cont' id = 'cont'>
<option value='-1'>Choisisez un Contact</option>
</select></td


parce que inner.HTML ne peux pas "écrire" dans le <Select mais seulement écrire toute la liste complète
<select .... >
<option> ....
</select>

donc en résumé:

dans ta page tu mets seulement:

<td></td>
<td>Contact :</td>

<td><div id='cont' style='display:inline'></div>


Tu fais générer par ton script php appelé par Ajax toute ta liste avec les
<select name="......  
<option>Choisissez</option>
<option>....

</select>


Tu dis:
J'ai fait un alert de xhr.responseText, et le message suivant apparait :

<select nom="cont" id="cont"><option value ="1">Machin</option>


Donc ton script fait bien déja ça mais mets tu as id='cont' pour le div et pour la liste et la c'est pas bon, un id doit être unique.

Change celui de ta liste.

@lain
0
flogood
 
Merci beaucoup !
Maintenant ça marche !!

A la prochaine...
0