Problème AJAX with PHP

iut
Eléphant du PHP | 61 Messages

16 mai 2007, 19:09

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

ViPHP
ViPHP | 5924 Messages

16 mai 2007, 20:44

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"; } }

iut
Eléphant du PHP | 61 Messages

21 mai 2007, 10:10

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?

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 10:19

Dans :

Code : Tout sélectionner

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

Code : Tout sélectionner

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

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 10:22

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);

iut
Eléphant du PHP | 61 Messages

21 mai 2007, 10:40

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

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 10:55

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 ?

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 10:59

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é...

iut
Eléphant du PHP | 61 Messages

21 mai 2007, 11:24

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?

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 11:37

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.

iut
Eléphant du PHP | 61 Messages

21 mai 2007, 11:51

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?

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 12:25

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);

ViPHP
ViPHP | 5924 Messages

21 mai 2007, 12:27

A ce moment je pe recup le nomVar a nimporte quel moment?
C'est à dire ?

Invité
Invité n'ayant pas de compte PHPfrance

21 mai 2007, 13:23

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

iut
Eléphant du PHP | 61 Messages

21 mai 2007, 14:08

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 !!!