13Fermer15
squalylLe 22/05/2008 à 16:30
non, c'est qu'il faut piger que xmlhttp est fait pour être asynchrone (même si on peut le forcer à être synchrone...)
si c'était moi je ferais :
function ajaxShow(fragment_url, element_id, ref) { 
	var element = document.getElementById(element_id); 
	var xmlhttp = xhr(); 
	xmlhttp.open("POST", fragment_url, true); 
	xmlhttp.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); 
	xmlhttp.onreadystatechange = function() { 
		if (xmlhttp.readyState == 4 ) { 
			if( xmlhttp.status == 200 ) { 
				element.innerHTML = xmlhttp.responseText; 
				putReferer(ref);
			} else { 
				element.innerHTML = '<div>Impossible de charger la page</div>'; 
			} 
		} 
	} 
	xmlhttp.send(""); 

} 



en gros le traitement de la réponse doit se faire dans onreadystatechange et pas après avoir fait send.
Car tu ne sais pas quand se produira le vrai chargement.
Ou alors tu auras besoin d'un flag, que tu initialises à faux avant l'appel à send, que tu passes à true dans l'évènement, et tu boucles sur la valeur de ce flag après avoir fait send...

attention en plus il faut définir onreadystatechange avant de faire open et send! (je sais pas si c nécessaire, mais c plus sur)

c data
style:
var flagdone=false;
var x=xhr();
var data;
x.onreadystatechange=function() {
	if(x.readyState==4) {
		flagdone=true;
		data=x.responseText;
	}
}
x.abort(); //au cas ou y'a déja un truc en cours
x.open("GET" /*t'as vraiment besoin de POST? t'envoies rien lol*/, fragment_url, true);
flagdone=false; //pour etre sur
x.send(null);
while(!flagdone) pause(1ms);
//faire des trucs ave