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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<?php
  echo ">>>".$_POST['information'];
?>