Page 1 sur 2

Problème AJAX with PHP

Posté : 16 mai 2007, 19:09
par iut
Bonjour,

Je suis nouveau sur le forum et je vous remercie grandement pour le travail que vous fournisser.

J'ai un souci avec l'Ajax car c'est la premiere fois que j'utilise cette technologie.

Je vous explique pourquoi j'ai choisit la techno AJAX

Je travaille dans un systeme de Profil. Pour un besoin x, trois profils de recherche existe.

Je possede une liste deroulante qui possede trois <option> au MAX> pour un besoin donné

et en dessous un formulaire qui est a la base vide , je voudrais quil se remplisse des valeurs quil a mis en base pour ce profil lorsque il le selectionne tout ca Grace a lajax

voici les bouts de code (tout tient dans la meme page PHP):

Dans la meme page, je voudrais que lajax me mette en POST la value de loption quil la selectionné
function fonction (nomBase){
		
		//On recupere le nom de la variante sélectionné
		//var liste2 = document.getElementById("liste");
		
		//Recupere le value de la liste deroulante selectionner
		var nomVar = document.getElementById("liste").value;
		
		//On initialise le XMLHttpRequest
		var xhr_object = null; 
	     
	   if(window.XMLHttpRequest) // Firefox 
	      xhr_object = new XMLHttpRequest(); 
	   else if(window.ActiveXObject) // Internet Explorer 
	      xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
	   else { // XMLHttpRequest non supporté par le navigateur 
	      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
	      return; 
	   } 
	 	
	   //Le traitement JavaScript se fera dans cette page	(je fais tout dans la meme page)
	   xhr_object.open("POST","test.php?="+nomBase,true);
	   
	     
	   xhr_object.onreadystatechange = function() { 
	      
             if(xhr_object.readyState == 4) {

			/*quest ce que je dois mettre la dedans*/
	         
              eval(xhr_object.responseText);
	       //petit test  
               document.getElementById('nomVariante').value = "ajax";
	        }
	   } 
	 
	   xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	   // --- ICI TU PASSE TES ARGUMENTS AU SCRIPT :

	   //alert(nomVar); -> il marche bien donc il rentre bien dans la fonction
	    var data = "nomVar="+nomVar;
	   xhr_object.send(data);
	
}
Appel de la fonction Ajax;
echo '<form method="POST" action= "test.php?base='.$nomBase.'"><table><tr><td>
	<select name=\'liste\' id=\'liste\' onChange=\'fonction("'.$nomBase.'")\'>';
Mais le probleme c que quand je fais un echo $_POST['nomVar'] ; la ou jen ai besoin, il arrive pas a le recupere il me fait une erreur du type index..... en gros le post nexiste pas et quand je fais un test avec un isset ben il ne maffiche rien

Posté : 16 mai 2007, 20:44
par Sékiltoyai
Il faut que tu ajoutes la méthode send pour envoyer les données, par exemple en modifiant la fonction onreadystatechange :

Code : Tout sélectionner

xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 1) { xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr_object.send("arg1=val1&arg2=val2"); // Tu peux faire send() si tu n'envoie rien. } else if(xhr_object.readyState == 4) { eval(xhr_object.responseText); document.getElementById('nomVariante').value = "ajax"; } }

Posté : 21 mai 2007, 10:10
par iut
Je viens de tester le bout de code que tu viens de me passer mais le probleme est le suivant:

Code : Tout sélectionner

function fonction (nomBase){ //On recupere le nom de la variante sélectionné //var liste2 = document.getElementById("liste"); //Recupere le value de la liste deroulante selectionner var nomVar = document.getElementById("liste").value; //On initialise le XMLHttpRequest var xhr_object = null; if(window.XMLHttpRequest) // Firefox xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject) // Internet Explorer xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; } //Le traitement JavaScript se fera dans cette page xhr_object.open("POST","test.php?="+nomBase,true); // xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 1) { xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded"); alert(nomVar);<- ne me laffiche pas donc ne rentre pas dans le if xhr_object.send("nomVar="nomVar); // Tu peux faire send() si tu n'envoie rien. } else if(xhr_object.readyState == 4) { eval(xhr_object.responseText); document.getElementById('nomVariante').value = "ajax";<- autre test que je fais et il ne me fait pas ce que je lui demande } } }
lorsque je fais
if (isset($_POST["nomVar"])){
		echo $_POST["nomVar"];
}
dans mon programme principal, il ne maffiche pas ce que je lui demande.

Mais Que Faire XD?

Posté : 21 mai 2007, 10:19
par Sékiltoyai
Dans :

Code : Tout sélectionner

xhr_object.send("nomVar="nomVar);
Tu as oublié le + :

Code : Tout sélectionner

xhr_object.send("nomVar="+nomVar);

Posté : 21 mai 2007, 10:22
par Sékiltoyai
Et ici :

Code : Tout sélectionner

xhr_object.open("POST","test.php?="+nomBase,true);
L'url est incorrecte tu as oublié le nom de l'argument :

Code : Tout sélectionner

xhr_object.open("POST","test.php?nom_argument="+nomBase,true);

Posté : 21 mai 2007, 10:40
par iut
Jai fait les changements que tu mas demandé de faire et le probleme persisite toujours :

Le alert() ne veut toujours pas safficher.

Pourrait tu mexpliquer a quoi correspond les xhr_object.readyState == 1 et xhr_object.readyState == 4

Posté : 21 mai 2007, 10:55
par Sékiltoyai
Pourrait tu mexpliquer a quoi correspond les xhr_object.readyState == 1 et xhr_object.readyState == 4
En gros ca sert à savoir dans quel état se trouve ton objet xhr_object :
http://msdn.microsoft.com/library/defau ... 2fafc6.asp

Tu peux mettre un alert(xhr_object.readyState); dans ta fonction onreadystatechange ?

Posté : 21 mai 2007, 10:59
par Sékiltoyai
Non, c'est bon, je pense avoir trouvé, il faut que tu mettes ta fonction xhr_object.onreadystatechange avant d'appeler xhr_object.open, car sinon elle n'est pas encore définie quand open est appelé...

Posté : 21 mai 2007, 11:24
par iut
Tu pourrais mettre le code que tu penses bon parce quela jai pas tout compris ^^ et en plus ca maidera a comprendre

a quoi sert la fonction open?

Posté : 21 mai 2007, 11:37
par Sékiltoyai
Dans ton code, tu as ca :

Code : Tout sélectionner

xhr_object.open("POST", url, true); xhr_object.onreadystatechange = function() { ... }
open sert à initialiser la connexion et passe aussitôt le ReadyState à 1, donc le ReadyState change avant que la fonction soit définie. Il faut donc définir la fonction avant d'initialiser la connexion :

Code : Tout sélectionner

xhr_object.onreadystatechange = function() { ... } xhr_object.open("POST", url, true);
De cette manière, la fonction sera définie et pourra capter l'évènement onreadystatechange quand le ReadyState passera de 0 à 1.

Posté : 21 mai 2007, 11:51
par iut

Code : Tout sélectionner

xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 1) { xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); alert(nomVar); //<- Il me l'affiche xhr_object.send("nomVar="+nomVar); // A ce moment je pe recup le nomVar a nimporte quel moment? } else if(xhr_object.readyState == 4) { document.getElementById('nomVariante').value = "ajax";//<- il me fait aussi cette modif est ce normal? } } xhr_object.open("POST","test.php?=nomBase"+nomBase,true); }
Il ne maffiche toujours pas le numVar a lendroit ou je le souhaite? Ya til une erreur au niveau de mon send?

Posté : 21 mai 2007, 12:25
par Sékiltoyai
Et ici :

Code : Tout sélectionner

xhr_object.open("POST","test.php?="+nomBase,true);
L'url est incorrecte tu as oublié le nom de l'argument :

Code : Tout sélectionner

xhr_object.open("POST","test.php?nom_argument="+nomBase,true);

Posté : 21 mai 2007, 12:27
par Sékiltoyai
A ce moment je pe recup le nomVar a nimporte quel moment?
C'est à dire ?

Posté : 21 mai 2007, 13:23
par Invité
Jai utiliser AJAX pour faire une liste deroulante dynamique

au depart jai la liste deroulante rempli des nom de variante que lutilisateur a mis en Base
et jai un formulaire qui est vide
ex: nom= ->textfield
....

et avec Ajax Je voudrais que quand lutilisateur selectionne une ellement de la liste deroulante et ben les informations quil a saisi en bazse pour la variante quil a semectionné s'affiche dans les text filed correspondant

et dans la requete qui me permet de faire le select adequate jai besoin de faire un where nomVariante=$POST_['nomVariante'] <- eet ce $POST avec la methode send que jai faite dans la fonction AJAX, je suis pas censé le récupéré?

Posté : 21 mai 2007, 14:08
par iut
En gros, je veux remplir un formulaire automatiquement et sans rafraichir ma page (PHP) lorsque je clique sur un élement de ma liste déroulate (avec un onchange() par exemple) ...

Mon code est ma requête fonctionnent bien mais j'ai une erreur au niveau du send (). Je n'arrive pas à récupérer la valeur envoyé par cettefonction dans mon code PHP. Par contre je récupére la valeur dans la fontion onreadychange() dans ma fonction AJAX ....

je bloque à ce niveau .... j'ai l'impression que le send("x="+x) n'envoie rien !!!