J'ai lié trois listes déroulantes avec ajax.
La première liste déroulante contient par exemple :
BA1
BA2
BA3
Quand je choisis BA2, les cours de BA2 apparaissent dans la 2e liste déroulante par contre, la 3e liste déroulante avec les types ne bouge pas.
J'aimerais juste que la 3e liste déroulante se mette à jour en même temps que la 2e.
Sauriez-vous me dire qu'est-ce que je dois modifier dans mon code pour y arriver ?
Voici le code de la première liste déroulante, celle-ci n'est PAS alimentée via AJAX :
Code : Tout sélectionner
<?php
//include('connexion.php');
$res = "SELECT * FROM cours WHERE MNEMONIC IN (SELECT MNEMONIC FROM enseigner WHERE MATRICULE_PROF = '" . $_SESSION['Matricule'] . "')";
$query = mysql_query($res);
$nbrow = mysql_num_rows($query);
echo($nbrow);
?>
<form>
<select name='annee' id='annee' onChange='javascript:go(this.value)'>
<option value='-1'> (1) Choisissez une année </option>
<?php
while($row = mysql_fetch_assoc($query))
{
echo "<option value='".$row["NOM_ANNEE"]."'>".$row["NOM_ANNEE"]."</option>";
}
?>
</select>
</form>
<!-- appel du code AJAX pour compléter la liste déroulante suivante -->
<script language="javascript" src="Scripts/Ajax_Listes_Deroulantes_Generiques.js"></script>La seconde liste déroulante est elle alimentée en AJAX :
Code : Tout sélectionner
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;
}
// ... et ici il n'y a aucune valeur qui change pour le générique
/**
* Méthode qui sera appelée sur le changement de la liste déroulante annees
*/
function go(annee)
{
//alert(annee);
var xhr = getXhr();
//alert(xhr);
// 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
//alert(xhr.readyState);
if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0 ) )
{
//alert('cool'); //cette alerte me permet de savoir qu'on arrive au moins à cet endroit du code
//alert(xhr.status);
//****** Je ne comprends pas comment le contenu de leselect est connu à cet endroit alors que xhr.open("POST","Scripts/ajaxLivre.php",true); se trouve plus bas
//*******
leselect = xhr.responseText;
//alert('xhr.responseText vaut '+xhr.responseText);
//alert(xhr.responseText);
// alert(leselect);
// On se sert de innerHTML pour rajouter les options a la liste
document.getElementById('select_Nom_mnemonics').innerHTML = leselect; //ici, le nom du select devrait être générique !!!!
//alert(leselect);
}
}
// Ici on va voir comment faire du post
xhr.open("POST","Scripts/ajaxLivre.php",true); //ici, on devrait rend ajaxLivre générique !!!!
// 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 de l'auteur
xhr.send("NOM_ANNEE="+annee); //ici, NOM_ANNEE et annee devraient être génériques !!!!
}Code : Tout sélectionner
<?php
session_start();
//print_r($_POST);
if(isset($_POST["NOM_ANNEE"]))
{
mysql_connect("localhost","root","mdp");
mysql_select_db("deliberations");
$res = mysql_query("SELECT MNEMONIC FROM cours WHERE NOM_ANNEE = '" . $_POST['NOM_ANNEE'] . "' AND MATRICULE_PROF = '" . $_SESSION['Matricule'] . "'");
//echo("SELECT MNEMONIC FROM cours WHERE NOM_ANNEE = '" . $_POST['select_Nom_annees'] . "' AND MATRICULE_PROF = '" . $_SESSION['Matricule'] . "'");
while($row = mysql_fetch_assoc($res))
{
echo "<option value='".$row["MNEMONIC"]."'>".$row["MNEMONIC"]."</option>";
}
}
?>Code : Tout sélectionner
function getXhr2()
{
//alert('salut');
var xhr2 = null;
if(window.XMLHttpRequest) // Firefox et autres
xhr2 = new XMLHttpRequest();
else if(window.ActiveXObject)
{ // Internet Explorer
try
{
xhr2 = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xhr2 = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else
{ // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr2 = false;
}
// alert('ici '+xhr2);
return xhr2;
}
/**
* Méthode qui sera appelée sur le changement de la liste déroulante annees
*/
function fnctcours(cours)
{
//alert(cours);
var xhr2 = getXhr2();
// alert(xhr2);
// On défini ce qu'on va faire quand on aura la réponse
xhr2.onreadystatechange = function()
{
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
//alert(xhr2.readyState);
//alert(xhr2.status);
if(xhr2.readyState == 4 && (xhr2.status == 200 || xhr2.status == 0 ) )
{
//alert('cool'); //cette alerte me permet de savoir qu'on arrive au moins à cet endroit du code
//alert(xhr2.status);
//****** Je ne comprends pas comment le contenu de leselect2 est connu à cet endroit alors que xhr2.open("POST","Scripts/ajaxLivre.php",true); se trouve plus bas
//*******
leselect2 = xhr2.responseText;
//alert('xhr2.responseText vaut '+xhr2.responseText);
// alert(leselect2);
// On se sert de innerHTML pour rajouter les options a la liste
document.getElementById('select_Nom_types').innerHTML = leselect2; //ici, le nom du select devrait être générique !!!!
//alert(leselect2);
}
}
// Ici on va voir comment faire du post
xhr2.open("POST","Scripts/ajaxTypes.php",true); //ici, on devrait rend ajaxLivre générique !!!!
// ne pas oublier ça pour le post
xhr2.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// ne pas oublier de poster les arguments
// ici, l'id de l'auteur
xhr2.send("MNEMONIC="+cours); //ici, NOM_ANNEE et annee devraient être génériques !!!!
}Code : Tout sélectionner
<?php
session_start();
//print_r($_POST);
if(isset($_POST["MNEMONIC"]))
{
//echo($_POST["MNEMONIC"]);
mysql_connect("localhost","root","mdp");
mysql_select_db("deliberations");
$res = mysql_query("SELECT Type_de_Cours FROM est_de_type WHERE Mnemonic = '" . $_POST["MNEMONIC"] . "'");
//echo("SELECT Type_de_Cours FROM est_de_type WHERE Mnemonic = '" . $_POST["MNEMONIC"] . "'");
$nombre = mysql_num_rows($res);
//echo($nombre);
while($row = mysql_fetch_assoc($res))
{
echo "<option value='".$row["Type_de_Cours"]."'>".$row["Type_de_Cours"]."</option>";
}
}
?>Un tout grand merci d'avance pour l'aide.
beegees