Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2678 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [AJAX] Mettre à jour la 3e liste déroulante en même temps que la 2e

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[AJAX] Mettre à jour la 3e liste déroulante en même temps que la 2e

n°1814878
beegeesdav​e
Posté le 21-11-2008 à 11:54:47  profilanswer
 

Bonjour tout le monde,
 
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 :
  1. <?php
  2. //include('connexion.php');
  3. $res = "SELECT * FROM cours WHERE MNEMONIC IN (SELECT MNEMONIC FROM enseigner WHERE MATRICULE_PROF = '" . $_SESSION['Matricule'] . "')";
  4. $query = mysql_query($res);
  5. $nbrow = mysql_num_rows($query);
  6. echo($nbrow);
  7. ?>
  8. <form>
  9.  <select name='annee' id='annee' onChange='javascript:go(this.value)'>
  10.   <option value='-1'> (1) Choisissez une année </option>
  11.    <?php
  12.     while($row = mysql_fetch_assoc($query))
  13.     {
  14.      echo "<option value='".$row["NOM_ANNEE"]."'>".$row["NOM_ANNEE"]."</option>";
  15.     }
  16.    ?>
  17.  </select>
  18. </form>
  19. <!-- appel du code AJAX pour compléter la liste déroulante suivante -->
  20. <script language="javascript" src="Scripts/Ajax_Listes_Deroulantes_Generiques.js"></script>

 
 
La seconde liste déroulante est elle alimentée en AJAX :
 

Code :
  1. function getXhr()
  2. {
  3.  var xhr = null;
  4.  if(window.XMLHttpRequest) // Firefox et autres
  5.   xhr = new XMLHttpRequest();
  6.  else if(window.ActiveXObject)
  7.  { // Internet Explorer  
  8.   try
  9.   {
  10.    xhr = new ActiveXObject("Msxml2.XMLHTTP" );
  11.   }
  12.   catch (e)
  13.   {
  14.    xhr = new ActiveXObject("Microsoft.XMLHTTP" );
  15.   }
  16.  }
  17.  else
  18.  {  // XMLHttpRequest non supporté par le navigateur  
  19.   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  20.   xhr = false;
  21.  }
  22.  return xhr;
  23. }
  24.  // ... et ici il n'y a aucune valeur qui change pour le générique
  25. /**
  26. * Méthode qui sera appelée sur le changement de la liste déroulante annees
  27. */
  28. function go(annee)
  29. {
  30.  //alert(annee);
  31.  var xhr = getXhr();
  32.  //alert(xhr);
  33.  // On défini ce qu'on va faire quand on aura la réponse
  34.  xhr.onreadystatechange = function()
  35.  {
  36.   // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
  37.   //alert(xhr.readyState);
  38.   if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0 ) )
  39.   {
  40.    //alert('cool'); //cette alerte me permet de savoir qu'on arrive au moins à cet endroit du code
  41.    //alert(xhr.status);
  42.    //******  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  
  43.    //*******
  44.    
  45.    
  46.    leselect = xhr.responseText;
  47.    //alert('xhr.responseText vaut '+xhr.responseText);
  48.    
  49.    //alert(xhr.responseText);
  50.    //      alert(leselect);
  51.    // On se sert de innerHTML pour rajouter les options a la liste
  52.    document.getElementById('select_Nom_mnemonics').innerHTML = leselect; //ici, le nom du select devrait être générique !!!!
  53.    //alert(leselect);
  54.   }
  55.  }
  56.  
  57.  // Ici on va voir comment faire du post
  58.  xhr.open("POST","Scripts/ajaxLivre.php",true); //ici, on devrait rend ajaxLivre générique !!!!
  59.  // ne pas oublier ça pour le post
  60.  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  61.  // ne pas oublier de poster les arguments
  62.  // ici, l'id de l'auteur
  63.  xhr.send("NOM_ANNEE="+annee); //ici, NOM_ANNEE et annee devraient être génériques !!!!    
  64. }


 
et via cette requête :
 

Code :
  1. <?php
  2. session_start();
  3. //print_r($_POST);
  4. if(isset($_POST["NOM_ANNEE"]))
  5. {
  6.  mysql_connect("localhost","root","mdp" );
  7.  mysql_select_db("deliberations" );
  8.  $res = mysql_query("SELECT MNEMONIC FROM cours WHERE NOM_ANNEE = '" . $_POST['NOM_ANNEE'] . "' AND MATRICULE_PROF = '" . $_SESSION['Matricule'] . "'" );
  9.  //echo("SELECT MNEMONIC FROM cours WHERE NOM_ANNEE = '" . $_POST['select_Nom_annees'] . "' AND MATRICULE_PROF = '" . $_SESSION['Matricule'] . "'" );
  10.  while($row = mysql_fetch_assoc($res))
  11.  {
  12.   echo "<option value='".$row["MNEMONIC"]."'>".$row["MNEMONIC"]."</option>";
  13.  }
  14. }
  15. ?>


 
Par contre, comme je l'ai dis plus haut, la 3e ne bouge pas :
 

Code :
  1. function getXhr2()
  2. {
  3.  //alert('salut');
  4.  var xhr2 = null;
  5.  if(window.XMLHttpRequest) // Firefox et autres
  6.   xhr2 = new XMLHttpRequest();
  7.  else if(window.ActiveXObject)
  8.  { // Internet Explorer  
  9.   try
  10.   {
  11.    xhr2 = new ActiveXObject("Msxml2.XMLHTTP" );
  12.   }
  13.   catch (e)
  14.   {
  15.    xhr2 = new ActiveXObject("Microsoft.XMLHTTP" );
  16.   }
  17.  }
  18.  else
  19.  {  // XMLHttpRequest non supporté par le navigateur  
  20.   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  21.   xhr2 = false;
  22.  }
  23. //  alert('ici '+xhr2);
  24.  return xhr2;
  25. }
  26. /**
  27. * Méthode qui sera appelée sur le changement de la liste déroulante annees
  28. */
  29. function fnctcours(cours)
  30. {
  31.  //alert(cours);
  32.  var xhr2 = getXhr2();
  33. // alert(xhr2);
  34.  // On défini ce qu'on va faire quand on aura la réponse
  35.  xhr2.onreadystatechange = function()
  36.  {
  37.   // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
  38.   //alert(xhr2.readyState);
  39.   //alert(xhr2.status);
  40.   if(xhr2.readyState == 4 && (xhr2.status == 200 || xhr2.status == 0 ) )
  41.   {
  42.    //alert('cool'); //cette alerte me permet de savoir qu'on arrive au moins à cet endroit du code
  43.    //alert(xhr2.status);
  44.    //******  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  
  45.    //*******
  46.    
  47.    
  48.    leselect2 = xhr2.responseText;
  49.    
  50.    //alert('xhr2.responseText vaut '+xhr2.responseText);
  51.    //      alert(leselect2);
  52.    // On se sert de innerHTML pour rajouter les options a la liste
  53.    document.getElementById('select_Nom_types').innerHTML = leselect2; //ici, le nom du select devrait être générique !!!!
  54.    //alert(leselect2);
  55.   }
  56.  }
  57.  
  58.  // Ici on va voir comment faire du post
  59.  xhr2.open("POST","Scripts/ajaxTypes.php",true); //ici, on devrait rend ajaxLivre générique !!!!
  60.  // ne pas oublier ça pour le post
  61.  xhr2.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  62.  // ne pas oublier de poster les arguments
  63.  // ici, l'id de l'auteur
  64.  xhr2.send("MNEMONIC="+cours); //ici, NOM_ANNEE et annee devraient être génériques !!!!    
  65. }


 

Code :
  1. <?php
  2. session_start();
  3. //print_r($_POST);
  4. if(isset($_POST["MNEMONIC"]))
  5. {
  6.  //echo($_POST["MNEMONIC"]);
  7.  mysql_connect("localhost","root","mdp" );
  8.  mysql_select_db("deliberations" );
  9.  $res = mysql_query("SELECT Type_de_Cours FROM est_de_type WHERE Mnemonic = '" . $_POST["MNEMONIC"] . "'" );
  10.  //echo("SELECT Type_de_Cours FROM est_de_type WHERE Mnemonic = '" . $_POST["MNEMONIC"] . "'" );
  11.  $nombre = mysql_num_rows($res);
  12.  //echo($nombre);
  13.  while($row = mysql_fetch_assoc($res))
  14.  {
  15.   echo "<option value='".$row["Type_de_Cours"]."'>".$row["Type_de_Cours"]."</option>";
  16.  }
  17. }
  18. ?>


 
Elle se modifie si je choisi une autre valeur dans la liste déroulante 2 mais le problème est que quand je n'ai qu'une valeur dans la liste déroulante 2, la liste déroulante 3 ne se met pas à jour, il met impossible de mettre à jour la liste de sélection 3 vue que je ne sais pas faire de changement dans la liste de sélection 2 (il n'y a qu'une seule valeur) et donc pas d'enclenchement de l'évènement "onChange" et donc pas de code AJAX.
 
Un tout grand merci d'avance pour l'aide.
 
beegees

mood
Publicité
Posté le 21-11-2008 à 11:54:47  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [AJAX] Mettre à jour la 3e liste déroulante en même temps que la 2e

 

Sujets relatifs
Transformation Tableau en Liste de Données[AJAX] Lier deux listes déroulantes
mise a jour d'un champ input avec une liste deroulantecomment mettre en place un chat vidéo
mettre un lien sur un fichier local[SQL] Faire ressortir une liste de donnée en fonction d'un champ
Ajax.InPlaceEditor et Internet Explorer 7[postgresql] colonne timestamp du jour
Plus de sujets relatifs à : [AJAX] Mettre à jour la 3e liste déroulante en même temps que la 2e


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR