Forum Clubic

Récupération argument javascript

Bonjour,

Je tente de faire des requète asynchrone et j’ai un problem, lorsque je clique sur un lien, j’appel une fonction javascript qui marche très bien.Dans cette fonction, j’appelle un fichier sur le server ‘test.php’ de cette manière:

xhr.open(“GET”, “js/test.php”, true);

ca marche aussi très bien, sauf que j’aimerai bien faire ce genre de chose :

function test(essaie_text)
{
. . . // tt le code qui permet de faire un appel aynscrhone
xhr.open(“GET”, “js/test.php?t=”+essai_test, true);
xhr.send(null);
}

Malheureusement, dans mon fichier test.php, la variable t est considéré comme inexistante, je voulais donc savoir comment faire pour passer des argument récupéré lors du clique, bien sur dans mon fichier php ( qui génère un fichier xml) j’ai echo ’ “$_GET[‘t’].” ’ , mais ça me dit que la variable t n’existe pas, comment faire ?

Merci d’avance

Salut,

c’est probablement xhr.send que tu cherches, mais n’utilises pas directement xhr! utilises plutôt des librairies comme prototyp ou jquery! (en plus des fonctions ajax y’a plein de ptits trucs simpa :wink: )

J’arrive vraiment pas à trouver l’erreur, c’est peut être une erreur de compréhension de la fonction open avec POST comme arguement, est ce qu’il y a un retour ensuite ???

Voila la partie qui nous interesse de la fonction, ainsi que ma fonction appelé ( je précise que je n’ai même pas d’ “alert” vide:


	xhr.onreadystatechange = function() { 
	if(xhr.readyState == 4){ // si c'est terminé
	maj_reg(xhr);
	}
	};
    xhr.open("POST", "js/test.php", true);
   xhr.send(test);  // La variable test est un paramètre de la fonction qui contient ce code et qui a pour valeur la valeur d'un select (j'ai testé et ca prend les bonne valeur)
}

function maj_region(xhr) // censé affiché ce qui revient grâce au fichier php qui génère du xml
{
	var docXML= xhr.responseXML;
	var items = docXML.getElementsByTagName("donnee")
	for (i=0;i<items.length;i++)
	{
		alert (items.item(i).firstChild.data);
	}

} 

Ensuite, voila mon fichier php: (qui génère du xml)


<?php
header('Content-Type: text/xml'); 
echo "<?xml version=\"1.0\"?>\n";
echo "<exemple>\n";
echo "<donnee>'".$_POST['test']."'</donnee>\n";
echo "<donnee>Monde</donnee> \n";
echo "</exemple>";
?>

Edité le 15/01/2009 à 13:26

juste au cas où, ajoute
xhr.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
entre open et send.

Et vérifies l’écriture de ton objet “test” : var test = “data1=” + data1 + “&data2=” + data2; (sans le “?”)

mon object test il vient tout simplement de mon appel :


onchange="javascript:region(this.value)

avec ma fonction déclaré :


function region(test)
{
 . . . 
xhr.send(test);
}

mais je n’y touche jamais , c’est peut être ça aussi qui est pas bon?

oui! il est de la forme “data” et non “data=data”!
il te faut
xhr.send(“test=”+test);

c’est comme si tu essayait de soumettre un form sans avoir donné de name à tes input…:grrr:

J’ai changé le xhr.send(“test=”+test);

mais par contre j’ai tjs aucune fenêtre d’alerte qui s’ouvre avec le $_POST[‘test’] dedans . . .

onreadystatechange tu appeles “maj_reg” et ta fonction s’appelle “maj_region”…

En effet , plutot pertinent comme remarque :smiley: ( quel nul je fais sur ce coup), par contre, un problème est apparu qq part, j’ai tenté de faire ca pour voir si j’arrivais bien à cet état , et j’ai même pas l’alert . . .


	if(xhr.readyState == 4){
	alert("avant maj_reg");
	maj_region(xhr);
		}

Donc si j’ai bien compris le principe, c’est qu’il y a une erreur par là , vu qu’on arrive même pas au stade “Terminé” :


    xhr.open("POST", "js/test.php", true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.send("test="+test);

Edité le 15/01/2009 à 14:36

plutôt que de se casser la tête, ça te dit pas de récupérer prototyp? :whistle:

je l’ai , mais je sais pas quelle fonction il faut utilisé :-), donc si tu me guide , jveux bien test avec prototype.js oui :wink:

www.prototypejs.org…

Si avec cette fonction t’as pas de réponse, vérifies qu’en appelant manuellement js/test.php tu as ton xml correctement formé

ps : vaut mieux être en utf8

Euh oui mon fichier est bien généré ( à part le text manquant qui devrait être le $_POST[‘test’] ) mais je vois pas vraiment en quoi ça facilite le travail ce que tu me propose là . . .

J’ai trouvé une fonction sur le net, que j’ai a peine modifier et qui “marche” , quand je dis marche, c’est que j’utilise le responsText qui m’affiche donc tout mon code XML AVEC la valeur de $_POST[‘test’] qui est bonne, donc c’est un bon point, PAR CONTRE , je n’arrive pas à transformé le code pour que ca m’affiche dans les alert, uniquement les info contenu dans les tag xml, voici la fonction :


function ajax_test(test)  {
	var req = null; //défini l'objet req de façon globale, pour qu'il soit reconnu dans tout le script
        req = new XMLHttpRequest();
	req.onreadystatechange = testRep; 
	req.open("POST", "js/test.php", true);
	req.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
	data = "test="+test;
	req.send(data);
	
	function testRep() {  
		if (req.readyState == 4) {
			if (req.status == 200) {
				alert(req.responseText);
			}
			else {
				alert("Problem: " + req.statusText);
			}
		}
	}
}

Edité le 15/01/2009 à 15:28

j’ai réussi à contourné le problème, au lieu de tenter de faire du XML avec le php, je fais tout du echo normal, puis je l’affiche grâce au DOM dans un Div, et ca marche. Par contre, maintenant j’ai un problème d’accent, les é è à etc . . . ne passe pas dans le retour, je suppose que c’est à cause de ça non ?

xhr.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);

Que faut-il mettre ?

Résolu aussi, suffit de mettre:

header(‘Content-Type: text/html; charset=ISO-8859-1’);

dans le fichier php appelé