AJAX=Listes déroulantes créées/rechargées, récupérer valeurs

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

AJAX=Listes déroulantes créées/rechargées, récupérer valeurs

Message le Dim Juil 29, 2007 21:33

Bonsoir,

J'ai utilisé Ajax pour me permettre de modifier/générer de nouvelles listes déroulantes en fonction du choix fait dans la première sans recharger la page.

Cependant, lors de l'envoi du formulaire, impossible de récupérer les valeurs des "nouvelles" listes déroulantes.

Au départ, celles-ci n'étaient pas créées donc j'ai pensé que le formulaire ne pouvait envoyer les variables qu'il ne connaissait pas lors de sa création.
Mais ensuite, j'ai créé les formulaires (display:none) mais le problème est identique... (en y réfléchissant, c'est logique vu qu'il n'y a aucune valeur dedans lors de la création du formulaire)

Comment faire pour que les valeurs des nouvelles listes puissent être envoyées ?


phpmikedu83
WRInaute passionné
WRInaute passionné
 
Messages: 1281
Inscription: 6 Aoû 2005

Message le Dim Juil 29, 2007 21:34

Faudrait un peu plus de concret, car c'est pas très clair pour ma part...

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Message le Dim Juil 29, 2007 21:44

Ok, c'est parti...

Code Ajax :
Code: Tout sélectionner
  <script type="text/javascript">
   /**
    * Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
    */
   function sendData(param, page, form)
   {
      if(document.all)
      {
         //Internet Explorer
         var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
      }//fin if
      else
      {
          //Mozilla
         var XhrObj = new XMLHttpRequest();
      }//fin else

      //définition de l'endroit d'affichage:
      if(form == 0){
         var content = document.getElementById("contenu2");
         content.innerHTML = '';
         content = document.getElementById("contenu");
      }
      else
         var content = document.getElementById("contenu2");
         
      XhrObj.open("POST", page);

      //Ok pour la page cible
      XhrObj.onreadystatechange = function()
      {
         if (XhrObj.readyState == 4 && XhrObj.status == 200)
            content.innerHTML = XhrObj.responseText ;
         
      }

      XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      XhrObj.send(param);
   }//fin fonction SendData

    </script>


Code HTML/PHP de la page avec les listes déroulantes :
Code: Tout sélectionner
<table>
<tr>
   <form method='POST' action='validPAYS.php'>
<td>
   
    <select style="width:150px" size="5" name="pays" OnChange="sendData('id='+this.value,'testlire.php',0)" onKeyUp="sendData('id='+this.value,'testlire.php',0)">
   <option selected="selected" value=0>----- Pays -----</option>
<?php
   $i=0;
   while ($dt=mysql_fetch_row($result))
   {
    // Remplir la liste déroulante des catégorie   
   echo "<option value=".($dt[0]).">".($dt[1])."</option>";
    if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
   }
   
   ?>   
   </select>
</td>
<td id="contenu">
<select size="5" name="depart" style="display:none">
</select>
</td>
<td id="contenu2">
<select size="5" name="villes" style="display:none">
</select>
</td>
</tr>
<tr>
<td><input type="submit" value="Enregistrer">
</td>
</form>
</tr>
</table>


Les listes "depart" et "villes" sont générées via des fichiers php appelés par l'ajax.

Pour la liste "depart", elle est générée avec ce fichier :
Code: Tout sélectionner
header('Content-type: text') ; // on déclare ce qui va être afficher

// test des POST emis
if(isset($_POST['id']) && !empty($_POST['id']) ){

    $id = $_POST['id'];
   
   if ($id == 1) {
      include('connexion.php');

      $rq="Select nom_dp,numero_dp from departement_table order by numero_dp;";
      $result= requete ($rq);
?>
     <select size='5' name='depart' id='depart' OnChange="sendData('id='+this.value,'testlire2.php',1)" onKeyUp="sendData('id='+this.value,'testlire2.php',1)">
<?php

       while ($dt=mysql_fetch_row($result))
       {    
       echo "<option value=".utf8_encode($dt[1]).">".utf8_encode($dt[1])." - ".utf8_encode($dt[0])."</option><br>";
       if ($i==0) { $k=$dt[1]; $i=1; } // garder la valeur du premier enregistrement
       }   
      echo "</select>";
   
   }
}

Tout fonctionne bien sauf la transmission (vers validPAYS.php) des valeurs des deux "nouvelles" listes.


phpmikedu83
WRInaute passionné
WRInaute passionné
 
Messages: 1281
Inscription: 6 Aoû 2005

Message le Dim Juil 29, 2007 21:52

je connais pas: Content-type: text
mais plutôt: Content-type: text/plain

Je pense pas que ton problème vienne de là, mais déjà à débugger quand on le code soit même l'AJAX, c'est costaud, alors le script d'un autre...

Je pense que si tu utilises Firefox, tu devrais télécharger l'extension firebug, elle te sera certainement très utile pour que tu puisses observer ce qui ce passe entre ta page et ton serveur... ;-)

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Message le Dim Juil 29, 2007 22:11

Content-type: text fonctionne tout comme text/plain.

Le problème vient du fait que les nouvelles listes créées ne sont pas prises en compte dans le formulaire.

Il doit y avoir une action à réaliser pour les associer au formulaire je pense...


Edit : erreur de ma part, le Content-type: text est bien différent, c'est du texte à l'état brut. Avec /plain, tous les caractères éèàî...etc sont modifiés .


phpmikedu83
WRInaute passionné
WRInaute passionné
 
Messages: 1281
Inscription: 6 Aoû 2005

Message le Dim Juil 29, 2007 22:40

Ouai, je comprends pas...

Regardes, sur cette page, les liens "voter", c'est le même principe, codé à peu près pareil... il doit y avoir une couille dans le potage:

http://blog.net-cup.fr/classement-blogs-p0.html

T'es sûr que t'aurais pas des guillemets qui peuvent tout faire foirer??? T'as pas d'erreur javascript dans la console??? t'as regardé l'extension firebug???


Marie-Aude
Modérateur
Modérateur
 
Messages: 11851
Inscription: 5 Juin 2006

Message le Dim Juil 29, 2007 22:44

Culinairement parlant, il y a des pays où la couille dans le potage est très appréciée... désolée, j'ai pas pu résister, etn en plus je peux pas aider :)


phpmikedu83
WRInaute passionné
WRInaute passionné
 
Messages: 1281
Inscription: 6 Aoû 2005

Message le Dim Juil 29, 2007 22:51

Marie-Aude a écrit:Culinairement parlant, il y a des pays où la couille dans le potage est très appréciée... désolée, j'ai pas pu résister, etn en plus je peux pas aider :)


ça fera certainement plaisir à l'auteur du topic, quand on patauge dans la semoule (celle-là devrait te plaire aussi lol), c'est bin aussi de se détendre l'esprit! :lol:

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Message le Dim Juil 29, 2007 22:52

phpmikedu83 a écrit:Ouai, je comprends pas...

Regardes, sur cette page, les liens "voter", c'est le même principe, codé à peu près pareil... il doit y avoir une couille dans le potage:

http://blog.net-cup.fr/classement-blogs-p0.html

T'es sûr que t'aurais pas des guillemets qui peuvent tout faire foirer??? T'as pas d'erreur javascript dans la console??? t'as regardé l'extension firebug???

Je ne vois pas trop le rapport avec mon script...

Il n'y a aucune erreur javascript.
Non je n'ai as encore utilisé firebug mais je ne pense pas qu'il me soit utile.


phpmikedu83
WRInaute passionné
WRInaute passionné
 
Messages: 1281
Inscription: 6 Aoû 2005

Message le Dim Juil 29, 2007 22:56

Robinson a écrit:
phpmikedu83 a écrit:Ouai, je comprends pas...

Regardes, sur cette page, les liens "voter", c'est le même principe, codé à peu près pareil... il doit y avoir une couille dans le potage:

http://blog.net-cup.fr/classement-blogs-p0.html

T'es sûr que t'aurais pas des guillemets qui peuvent tout faire foirer??? T'as pas d'erreur javascript dans la console??? t'as regardé l'extension firebug???

Je ne vois pas trop le rapport avec mon script...

Il n'y a aucune erreur javascript.
Non je n'ai as encore utilisé firebug mais je ne pense pas qu'il me soit utile.


ben comme je l'ai dit, le lien "voter" c'est de l'ajax... suffit de regarder la source pour s'en rendre compte... ça ressemble beaucoup à ce que tu as fais, donc, je vois pas ce qui peut ne pas aller!
Après, moi au départ, je veux bien t'aider, mais si toi tu veux pas, ben moi, j'ai pas de problème de script, tu vois ;-)
Je me verrais par contre mal coder de l'Ajax sans firebug, comme les maçons monter des maisons sans truelle, mais ça c'est un choix!

edit: le site, je l'ai pas pris au hasard, c'est un des miens, donc je sais comment il est codé côté client, et surtout, côté serveur.

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Message le Dim Juil 29, 2007 23:18

Je viens d'installer firebug mais ne trouve strictement aucun problème...


phpmikedu83
WRInaute passionné
WRInaute passionné
 
Messages: 1281
Inscription: 6 Aoû 2005

Message le Dim Juil 29, 2007 23:21

Robinson a écrit:Je viens d'installer firebug mais ne trouve strictement aucun problème...


Ok, s'il n'ya pas de problème, c'est qu'à priori, il n'y a pas d'erreur javscript, mais ça on le savait déjà... Par contre, tu as la vision du html que tu as généré à l'aide de ton Ajax, ça tu l'as pas dans la source de ta page, et je pense que ça devrait te donner beaucoup de renseignements!
(L'onglet HTML dans firebug)

ps:en plus, ça doit être pas grand chose lol

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Message le Dim Juil 29, 2007 23:38

Oui j'ai vu ça mais comme prévu, pas de problèmes :( (visibles)

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Message le Dim Juil 29, 2007 23:48

arrrrrghhhh, j'ai trouvé...

le formulaire... il ne voulait pas qu'il soit intégré à la table...
En mettant le tableau complètement à l'intérieur du form, ça marche.


Marie-Aude
Modérateur
Modérateur
 
Messages: 11851
Inscription: 5 Juin 2006

Message le Lun Juil 30, 2007 1:17

phpmikedu83 a écrit:
Marie-Aude a écrit:Culinairement parlant, il y a des pays où la couille dans le potage est très appréciée... désolée, j'ai pas pu résister, etn en plus je peux pas aider :)


ça fera certainement plaisir à l'auteur du topic, quand on patauge dans la semoule (celle-là devrait te plaire aussi lol), c'est bin aussi de se détendre l'esprit! :lol:


Oui et puis en plus la couille dans le potage, ça se mange aussi en couscous :)

Bon c'était juste histoire de vous dire que vous étiez pas tout seuls à 2 heures du mat ;)

AJAX=Listes déroulantes créées/rechargées, récupérer valeurs

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Bernard68 et 1 invité