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

Robinson

WRInaute passionné
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 ?
 

Robinson

WRInaute passionné
Ok, c'est parti...

Code Ajax :
Code:
  <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:
<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:
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é
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é
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é
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

WRInaute accro
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é
Marie-Aude a dit:
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é
phpmikedu83 a dit:
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é
Robinson a dit:
phpmikedu83 a dit:
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.
 

phpmikedu83

WRInaute passionné
Robinson a dit:
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é
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

WRInaute accro
phpmikedu83 a dit:
Marie-Aude a dit:
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 ;)
 

phpmikedu83

WRInaute passionné
Robinson a dit:
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.

Ok, tellement la base que j'avais pas fait attention à ça lol
 

Discussions similaires

Haut