Ajax - réception Synchrone et FireFox

Fermé
Helyis - 23 oct. 2008 à 22:41
 Koulou - 9 janv. 2009 à 11:40
Bonjour,

j'ai un petit souci de réception des données avec FireFox.
Si mon 'open' est déclaré comme ceci:
xhr.open("POST", "aff.php", true); // donc en asynchrone
ça fonctionne parfaitement.
Si il est déclaré comme ça:
xhr.open("POST", "aff.php", false); // donc en synchrone
ça ne fonctionne plus du tout. Les données sont bien reçues (vues dans la réponse avec FireBug), mais pas affichées.

D'un autre côté, ça fonctionne parfaitement avec Chrome, Opera et Internet Explorer 7.0.
Sur ces browsers autres que FireFox, xhr.open("POST", "aff.php", true); fonctionne quasiment correctement, sauf que de temps en temps, les données n'ont pas le temps de s'afficher. L'utilisation du mode Synchrone était donc la solution.

Quelqu'un aurait-il une idée ?


X.
A voir également:

3 réponses

pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
23 oct. 2008 à 22:46
Qu'est-ce que tu veux dire par "les données n'ont pas le temps de s'afficher" ?
1
Hé bien, d'après ce que j'ai compris des modes Synchrone et Asynchrone, c'est qu'en Asynchrone, le script n'attend pas d'avoir reçu les données pour continuer. De fait, si le .php met trop de temps à répondre, les données n'arrivent pas.
En ce qui me concerne, ça se traduit par le fait que mon <DIV> de destination n'est pas actualisé. Les anciennes données restent affichée. Mais tout se passe bien lorsque je passe en mode Synchrone. Du moins pour les autres browsers que FireFox.

J'ai contourné le problème de la façon suivante:
var ua = navigator.userAgent;
if (ua.match("Firefox")) xhr.open("POST", "aff.php", true);
else xhr.open("POST", "aff.php", false);
mais c'est quand même pas bien normal que FireFox pose des problèmes comme ça.


X.
0
Essaie quelquechose comme ça:

/****************************************
dt = document.getElementsByTagName('body');
dt[0].style.cursor="wait";
var self=this;

if (window.ActiveXObject)
{
self.xmlHttpReq = new ActiveXObject('Microsoft.XMLHTTP');
}
else if(window.XMLHttpRequest)
{
self.xmlHttpReq = new XMLHttpRequest();

}

self.xmlHttpReq.open("POST", "aff.php", false);
self.xmlHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

self.xmlHttpReq.send(tes_params);
dt[0].style.cursor="default";
document.getElementById(ta_divi).innerHTML=self.xmlHttpReq.responseText;

**************************************************/

En esperant que ça t'aide :-)
0