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
Le script JS : test.js
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 php (sans interrêt) : test.php
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;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <?php echo ">>>".$_POST['information']; ?>
Partager