[résolu]Probleme de lessive

Bonjour,

Comme l’indique le titre, j’ai un problème avec AJAX, ou plus précisément ma connaissance (faible) du javascript a encore des failles.

passons au coeur de la chose, voici le code

[code]var http_request = null;
var resultatXML = null;

function ajax_request(methode, url, arguments) {
if(methode != « GET ») {
if(methode != « POST ») {
alert(« Requete Ajax : methode incorrecte → " + methode);
return false;
}
}
if(!arguments) {
arguments=’’;
}
if(!url) {
alert(« Requete Ajax : url incorrecte »);
return false;
}
if(methode == « GET ») {
data=null;
url+= »?"+arguments;
} else {
data=arguments;
}

	 if (window.XMLHttpRequest)
		 http_request = new XMLHttpRequest();

	 if (http_request) {
		 http_request.onreadystatechange = function() {
				  if (http_request.readyState == 4) {
					  if (http_request.status == 200) {
						  resultatXML = http_request.responseXML.documentElement;
					  }
				  }
		 }
		 http_request.open(methode, url ,true);
		 http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		 http_request.send(data);
	 }

}

ajax_request(« GET », « exemple.php », « vara1=test&vara2=test »);[/code]

voila voila…
En fait je veux recuperer la variable « resultatXML » de la fonction http_request().
Tel que c’est je pense que ca devrait marcher… mais non :stuck_out_tongue:

Si une ame charitable (et eventuellement avec des predisposition au javascript) pouvait m’aider :P…
Merci d’avance

Je te suggère de t’inspirer ou d’utiliser du code “AJAX” qui marche ou zieuter AHAH.

Merci pour ce bout de code,
mais le mien fonction tres bien, dans le morceau de code suivant :

http_request.onreadystatechange = function() { if (http_request.readyState == 4) { if (http_request.status == 200) { resultatXML = http_request.responseXML.documentElement; } } }

… il suffit que je remplace resultatXML = http_request.responseXML.documentElement; par un alert(); ou tout autre traitement de la responseXML… et cela fonctionne

Or moi, je veux recuperer ce resultat en dehors de la fonction par propagation de la variable resultatXML (déclaré en dehors de la fonction). j’ai deja fais cela plein de fois, mais dans cette fonction là cela ne veut pas fonctionner … mistere…

quand je parle de propagation en fait je parle de ce genre de code :

[code]var mavariable=1;

function prout() {
mavariable=2;
}
alert(mavariable); // affiche 1
prout();
alert(mavariable); // affiche 2[/code]

dans mon cas, je resume le code :

[code]var resultatXML = null;

function ajax_request(methode, url, arguments) {
[…]
resultatXML = http_request.responseXML.documentElement;
[…]
}

ajax_request(« GET », « exemple.php », « vara1=test&vara2=test »);
alert(resultatXML); // affiche null[/code]

PS: ne pas faire de remarques sur le fait que cela ne fonctionne pas avec IE, c’est normal, je fais une application javascript/ajax fonctionnant exclusivement sous FF1.5+ :stuck_out_tongue:

:’(

personne n’a une idée de la chose ?
Ou alors je ne suis pas assez clair dans mes explications ?

sssiouuplai… de l’aide :stuck_out_tongue:

trouvé :stuck_out_tongue:

je post la reponse apres

[code]/********************************************************************************

***\

  •   						  ajax_request									 *
    


  • methode : methode de la requette ex :–> « POST » ou « GET » *
  • url : url du fichier asynchrone ex :–> « fichier1.php » *
  • arguments : arguments de la requette ex :–> « vara1=test1&vara2=vara2 » *
  • type : type de resultat ex :–> « responseText » ou « responseXML » *
  • fonction : de traitement de la requette ex :–> « traitement1 » *
    ***************************************************************************

********/
function ajax_request(methode, url, arguments,type, fonction) {
var http_request = false;
var data=null;
var taille=0;

	 //traitement de la methode souhaité
	 if(methode != "GET") {
			  if(methode != "POST") {
					  alert("Requete Ajax : methode incorrecte --> " + methode);
					  return false;
			  }
	 }

	 //traitement des arguments
	 if(!arguments) {
			 arguments='';
	 }

	 //traitement du type de réponse
	 if(type != "responseText") {
			 if(type != "responseXML") {
					  alert("Requete Ajax : type incorrecte --> " + type);
					  return false;
			 }
	 }

	 //traitement du fichier asynchrone
	 if(!url) {
			 alert("Requete Ajax : url incorrecte");
			 return false;
	 }

	 //traitement de la fonction de traitement du resultat
	 if(!fonction) {
			 alert("Requete Ajax : fonction incorrecte");
			 return false;
	 }else{
			 fonction=fonction+"(http_request."+type+")";
	 }

	 //traitement des arguments
	 if(methode == "GET") {
			 url+="?"+arguments;
	 } else {
			 data=arguments;
			 taille=data.length;
	 }


	 if (window.XMLHttpRequest) { // Mozilla, Safari,...
		 http_request = new XMLHttpRequest();
		 if (http_request.overrideMimeType) {
			 http_request.overrideMimeType('text/xml');
		 }
	 } else {
		 if (window.ActiveXObject) { // IE
			 try {
				 http_request = new ActiveXObject("Msxml2.XMLHTTP");
			 } catch (e) {
				 try {
					  http_request = new ActiveXObject("Microsoft.XMLHTTP");
				 } catch (e) {}
			 }
		 }
	 }

	 if (!http_request) {
		  alert('Cannot create an XMLHTTP instance');
		  return false;
	 } else {
		 http_request.onreadystatechange = function() {
			 if (http_request.readyState == 4) {
				  if (http_request.status == 200) {
						   eval(fonction);
						   return true;
				  } else {
						   alert("Error no."+http_request.status+"\nAn error occur while receiving data");
						   return false;
				  }
			 }

		 }
		 http_request.open(methode, url ,true);
		 http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		 http_request.setRequestHeader("Content-length", taille);
		 http_request.setRequestHeader("Cache-Control", "no-cache");
		 http_request.setRequestHeader("Connection", "close");
		 http_request.send(data);
	 }

}

//
// exemple d’utilisation
//
function TraitementListe1(resultatText) {
//traitement 1
//alert(resultatText);
}

function TraitementListe2(resultatXML) {
//traitement 2
//var DocumentObjet = resultatXML.documentElement;
//utilisation de DOM toussa
}

ajax_request(« GET », « liste1.php », false, « responseText », « TraitementListe1 »);
ajax_request(« POST », « liste2.php », « vara1=test&vara2=test2 », « responseXML », « TraitementListe2 »);[/code]

voila voila, pour ceux qui veulent réutiliser ce code ensuite, j’attends vos commentaires :stuck_out_tongue:

Z’etes bien barjots d’aller ecrire tout ca a la main tout seul :stuck_out_tongue:

:stuck_out_tongue: pourquoi ? ASP.net integre déjà toussa ?
mais le serveur qui hebergera mon projet est sous linux avec apache. donc je fais une appli html/javascript, (non pas php sinon je deborde et je vais avoir une mauvaise note :P)

J’ose esperer quand meme qu’il y a un ou plusieurs framework AJAX en PHP quand meme! C’est pas au web dev de base de se taper ce genre de trucs plus ou moins commun a tous les sites qui implementent sous une fome ou une autre XMLHttpRequest… On peut faire super plus haut niveau et robuste que ca :stuck_out_tongue: Une recherche google devrait t’eviter de te taper ce genre de trucs quand meme :stuck_out_tongue:

Puisque tu demandes en Asp.Net :P, par exemple, il y en a plusieurs que je connais (exemple, exemple, exemple, exemple, exemple), et surement celui qui a le plus de potentiel parceque boudin bosse dessus et qu’il m’en parle avec amour (hehe) : ATLAS.

Pour le plaisir de le faire soit meme :stuck_out_tongue:
Comme je débute en javascript, faut bien commencer par les bases :stuck_out_tongue:

Sinon pour les frameworks, le premier qui me vient à l’esprit c’est OpenRico, mais il n’est pas encore documenté… dommage