[AJAX] Deroulement de script XMLHttpRequest différent sous IE et FF
Bonjour,
Je suis nouveau, donc toutes mes excuses si je ne suis pas assez clair ...
Nota : je ne sais pas si mon problème releve seulement de JS ou d' AJAX
Mon souci :
J'ai fait une page qui fait appel à un script JS. Ce script JS utilise classiquement XMLHttpRequest pour obtenir une info du serveur (en POST et en asynchrone).
Mais : le comportement de mon ensemble n'est pas le même sous IE et FF (anormal sous FF !) :
Sous FF, la fonction semble ne vouloir finir qu'une fois le script principal terminé
Sous IE, c'est un peu le contraire, il se fait les 4 appels déclenchés par l'état avant de sortir de ma fonction de maj_messages.
Quelqu'un a-t-il une explication et surtout une solution (pour ma page complète, ça a une importance)
Pour être plus clair sur le forum, j'ai tout simplifié au maximum
NOTA pour ne pas être surpris : sous FF il faut "tuer" FF pour en sortir car on se retrouve bloqué dans la boucle finale
Le fichier de base : page.html
Code:
1 2
| <html><head><script src="./test.js" type="text/javascript"></script></head>
<body><div><p>Texte d'exemple</p></div></body></html> |
Le script JS : test.js
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| var $xhr_fini;
function maj_messages() {
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;
}
$data = "information=aaa";
xhr_object.open("POST","./test.php",true);
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr_object.onreadystatechange = function anonymous() {
alert('Le statut vient de changer : '+xhr_object.readyState);
if(xhr_object.readyState == 4) {
alert('on est au bon statut : '+xhr_object.readyState);
var $reponse = xhr_object.responseText.split(":");
var $informationautiliser = $reponse[0];
if(typeof($informationautiliser) != "undefined") {
alert("LA ON FAIT CE QUE JE VEUX FAIRE AVEC LE RETOUR DE MON PHP");
}
$xhr_fini = true;
}
}
alert("Avant envoi des donnees");
xhr_object.send($data);
alert("Après envoi des donnees");
}
function demarrer() {
$xhr_fini = false;
maj_messages();
while ($xhr_fini == false) {
alert ("On est dans la boucle d'attente : "+$xhr_fini+" : "+xhr_object.readyState);
}
alert ("Fin de la fonction demarrer : "+$xhr_fini);
}
window.onload = demarrer; |
Le script php (sans interrêt) : test.php
Code:
1 2 3
| <?php
echo ">>>".$_POST['information'];
?> |