Ajax et Firefox

Ajax et Firefox - HTML/CSS - Programmation

Marsh Posté le 27-06-2007 à 11:17:14    

J'ai un objet AJAX  
Si vous connaissez :

Code :
  1. function getXhr(){
  2.  var xhr = null;
  3.  try {
  4.      xhr = new XMLHttpRequest();
  5.  }
  6.  catch(e)
  7.  {
  8.       xhr = new ActiveXObject("Microsoft.XMLHTTP" );
  9.  }
  10.  return xhr;
  11. }


 
Et donc jusqu'a maintenant j'utilisais Firebug, un debugeur javascript pour firefox, et ie classique.
Les appels ajax fonctionnaient très bien jusqu'a maintenant, que ce soit sous ie et firefox.
Mais j'ai voulu recement desactivé firebug pour des tests, et la, les appels AJAX ne marchent plus sous firefox sans firebug !
Tout marche toujours bien sous ie, niquel
Firefox passe bien dans le javascript( testé avec des alerts ), il passe meme sur l'instruction de l'ajax, les alerts étant après, mais apparement ils ne doivent rien renvoyer.
Mais c'est halucinant parce qu'au debut, je n'utilisais pas firebug, et l'objet ajax, je ne l'ai pas du tout modifié !
Mystère :/
Des idées?

Reply

Marsh Posté le 27-06-2007 à 11:17:14   

Reply

Marsh Posté le 27-06-2007 à 11:21:19    

Apparement le fait de poster ma inspiré ^^ :

Code :
  1. function call (url, response, concatener){
  2.  var xhr = getXhr();
  3.  xhr.onreadystatechange  = function()
  4.      {
  5.          switch (xhr.readyState){
  6.     case 4 :
  7.               if (xhr.status  == 200)
  8.       {
  9.        if(concatener == 1){
  10.                    response.innerHTML += xhr.responseText;
  11.                    }else{
  12.                     response.innerHTML = xhr.responseText;
  13.                    }
  14.       }
  15.     else response.innerHTML += "<li>"+xhr.status;
  16.    break;
  17.          }
  18.      };
  19.     xhr.open( "GET", url,  true); ICI LE FALSE
  20.     xhr.send(null);
  21. }


Il était a false pour un effet sychronisé. ( fonction open de js)
Pas trop compris :/
Ya un moyen pour synchroniser le navigateur avec la reponse de l'objet, autre que de mettre false?
Ou pouquoi quand on met false ca couille?


Message édité par Decapfour le 27-06-2007 à 11:21:59
Reply

Marsh Posté le 27-06-2007 à 11:30:37    

Ca ne couille pas quand on met false, false génère un appel synchrone bloquant (qui freeze tout le navigateur, accessoirement) donc au lieu de mettre un callback on met le code de traitement derrière le xhr.send(null).
 
C'est marqué dans les docs d'ailleurs...


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 11:53:48    

Cad?
C'est que ca bloquait pas la navigateur avec false et l'histoire de l'appel qui marchait pas, donc je me demandais :/
Tu proposerais de mettre le code de la fonction call dans la fonction de l'appel de l'objet c'est ça?
Le pb c'est que j'apelle très souvent call :/

Reply

Marsh Posté le 27-06-2007 à 11:54:13    

vas lire les docs


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 12:06:38    

Ok... merci :/

Reply

Marsh Posté le 27-06-2007 à 12:27:01    

en gros il te dit que .onreadystatechange ne sert à rien en synchrone.
Ta fonction Call() EST la fonction qui appelle l'objet, donc elle reste mais tu la modifie.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 27-06-2007 à 14:38:18    

Je peux la modifier comment?
 
PS : la doc c'est sympa mais google trouve pas grand chose a part mettre false a la place de true, et je me vois mal dire a mon patron que je vais lire une doc de 40 pages pour trouver une erreur qu'en 5 min avec un peu de bonne vonlonté vous pourriez m'expliquer.

Reply

Marsh Posté le 27-06-2007 à 14:43:32    

http://developer.mozilla.org


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 14:49:23    

Ecoutes c'est super.... Tu lis les post de temps en temps? Enfin bon...
Donc sinon rien pour me dire pouquoi ca marche avec firebug?

Reply

Marsh Posté le 27-06-2007 à 14:49:23   

Reply

Marsh Posté le 27-06-2007 à 14:53:23    

Methods
open(mode, url, boolean)  mode: type of request, GET or POST
url: the location of the file, with a path.
boolean: true (asynchronous) / false (synchronous).
optionally, a login and a password may be added to arguments.
send("string" )  null for a GET command.
 
Hmm Hmmmm
Mais encore?
 
PS : je tiens vraiment au synchone car une fois sur deux, le script met un peu plus de temps, et un getElementbyID derrière aime pas trop chercher un truc que le call a pas encore renvoyé.

Message cité 1 fois
Message édité par Decapfour le 27-06-2007 à 14:54:37
Reply

Marsh Posté le 27-06-2007 à 14:53:27    

Decapfour a écrit :

Ecoutes c'est super.... Tu lis les post de temps en temps?


Jamais, je suis un bot et je t'emmerde.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 14:55:51    

Constructif dis moi ^^
Jchais pas tu semble avoir la solution, alors bon, me dire d'aller voir une doc, c'est pas un peu... abusé?

Reply

Marsh Posté le 27-06-2007 à 15:08:28    

Code :
  1. xhr.open( "GET", url,  false);
  2.     xhr.send(null);
  3. response.innerHTML = xhr.responseText;


Dans une fonction call_asynch() ça marche, mais c'est "bon"?

Reply

Marsh Posté le 27-06-2007 à 15:11:41    

Decapfour a écrit :

Jchais pas tu semble avoir la solution, alors bon, me dire d'aller voir une doc, c'est pas un peu... abusé?


non

Decapfour a écrit :

Code :
  1. xhr.open( "GET", url,  false);
  2.     xhr.send(null);
  3. response.innerHTML = xhr.responseText;


Dans une fonction call_asynch() ça marche, mais c'est "bon"?


oui, mais c'est un appel synchrone pas un appel asynchrone.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 15:18:32    

Oui, mais l'appel synchrone c'est le but justement :/
Sinon merci

Reply

Marsh Posté le 27-06-2007 à 15:36:28    

Decapfour a écrit :

Constructif dis moi ^^
Jchais pas tu semble avoir la solution, alors bon, me dire d'aller voir une doc, c'est pas un peu... abusé?


Pas vraiment, là c'est un truc assez basique, ya 38 tutos sur le sujet, et savoir chercher dans la doc officielle (savoir où elle est, ou chercher, etc) est complètement indispensable pour être un minimum indépendant. La doc en sait plus que n'importe quel forumeur ;) (a part pour les bugs p-e, encore que ca dépend:o)

 
Decapfour a écrit :

Code :
  1. xhr.open( "GET", url,  false);
  2.     xhr.send(null);
  3. response.innerHTML = xhr.responseText;


Dans une fonction call_asynch() ça marche, mais c'est "bon"?


call_synch(), tu veux dire :o
Oui c'est bon.

 
Decapfour a écrit :

PS : je tiens vraiment au synchone car une fois sur deux, le script met un peu plus de temps, et un getElementbyID derrière aime pas trop chercher un truc que le call a pas encore renvoyé.


-Le synchrone attent la réponse du serveur et pendant ce temps, freeze le navigateur. Quand la réponse est arrivé, il reprend le script là ou il était. Ca t'as pigé.
-L'asynchrone éxécute une fonction donnée (définie par .onreadystatechange) à chaque étape de la requete (envoyé, en cours, renvoyé, recu si je ne m'abuse). Dans cette fonction tu teste cette étape et comme ça, tu peux éxecuter un code seulement un fois que la réponse est arrivé (.readystate=4). Donc si tu mets ton getElementById ici, ça devrait pas poser de pb, si ?


Message édité par theredled le 27-06-2007 à 15:37:52

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed