FireFox 3 + Ajax = bug ?

Signaler
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
-
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011
-
Bonjour à tous


Je suis face à un bug désopilant, un code en ajax qui fonctionne sous FF2 mais pas sous FF3


voila le code que j'utilise

requete = new XMLHttpRequest();


      requete.overrideMimeType('text/xml');


      requete.onreadystatechange = traitementXML;


      requete.open("GET", vurl , false);


      requete.send(null);

function traitementXML(){


   alert("Bouuuu !");


}


j'ai passé requete.open avant requete.onreadystatechange ça ne change rien,idem en remplacant requete.onreadystatechange traitementXML; par requete.onreadystatechange function() {traitementXML;};

mon javascript est mauvais ?

24 réponses

Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
Bonjour,
 déjà es tu conscient que ton code ne fonctionnera pas sous le navigateur installé par défaut de l'OS le plus utilisé dans le monde?

Sinon vurl c'est quoi?

Et après je suis pas sure de cette ligne soit juste. requete.onreadystatechange = traitementXML;
En général je fais des truc dans ce genre après avoir crée un xhr (xmlhttprequest)

function test(rag1, arg2) {
      
  var xhr = getXHR();

  if (xhr == null) {
    alert("Votre navigateur ne supporte pas AJAX");
    return;   
  }

  // Fonction à exécuter quand on aura une réponse du serveur
  xhr.onreadystatechange = function() {
    // on ne traite que si on a tout recu et que la réponse du serveur est OK    if (xhr.readyState 4 && xhr.status 200) {

      // on récupère la réponse au format texte ...
      var reponse = xhr.responseText;

      // ... on remplace le bloc concerné ...
      div.innerHTML = reponse;
    }

  }
// connexion au serveur:
xhr.open("GET","unepage.php?arg1="+arg1+"&arg2="+arg2,true);

// envoi de la requete :
xhr.send(null);
}

La fonction getXHR() crée un objet xhr suivant le navigateur.
<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)
Messages postés
626
Date d'inscription
samedi 28 septembre 2002
Statut
Membre
Dernière intervention
18 mai 2009
3
"mon javascript est mauvais ?"

Oui et non en fait, c'est un disfonctionnement qui n'était pas bloquant ds les versions antérieurs à FF3.

"onreadystatechange" ne s'utilise pas de la même façon dans une requête synchrone/asynchrone.

Essai de passer en asynchrone et ça devrait fonctionner (dailleur on utilise Ajax generalement dans ce mode).

requete.open("GET", vurl , true);
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011

re,

je n'ai mis que la parti du code concernant Firefox

ensuite, c'est un code qui est dans une fonction qui renvois de l'information, ça n'attaque pas directement la page

mon code fonctionne parfaitement sous i.e 6 (pas testé sous ie.7 faudra que je le fasse) et Firefox2

la fonction traitementXML parse un flux xml pour en récupérer des infos que la fonction va renvoyé. la aussi je n'ai mis que le code de teste afin de simplifié
sinon j'ai un peu avancé mon code est synchone (open false) ça marche avec FF2 mais pas FF3 si je le passe en asynchrone (open true) ça marche sur FF3 mais pas FF2
Messages postés
626
Date d'inscription
samedi 28 septembre 2002
Statut
Membre
Dernière intervention
18 mai 2009
3
"mon code est synchone"

Es-tu certain de cette décision ? En connais-tu les conséquences ?

"ça marche avec FF2 mais pas FF3 si je le passe en asynchrone (open = true) ça marche sur FF3 mais pas FF2"

Alors le problème vient d'ailleurs.
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011

salut

je sais ce qui se passe, quand le code est synchrone ou non synchrone.

mais je visualise peut-etre mal les consequences !

et justeùment je cherche d'ou viens le pb !
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
Bonjour,

      requete.onreadystatechange = traitementXML;
      requete.open("GET", vurl , true);
      requete.send("");

peut-être ?

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
onreadystatechange n'est utilisable qu'en asynchrone
et rassures toi, toutes les versions de tous les navigateurs : aucun bug     ;o)
enfin, tellement rares, dans des circonstances tout à fait particulières, et généralement
du aux extensions et autres modules complémentaires !   qu'on peut affirmer cela.

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011

re,

bultez j'ai déjà passé true et "" dans les parametre ç amarche pour FF3 mias pas FF2

par contre j'utilise quoi à la place de onreadystatehange ?
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
ben... rien...
"derrière" le send, ça continuera... après la réponse du script sur le serveur.
c'est le "principe" du synchrone.

perso, avec FF, pas testé en version 3, mais dans celles précédentes,
il fallait send ('') et surtout pas send(null)

il serait quand même intéressant que tu nous mettes l'extrait
que tu utilises actuellement pour tester, parce qu'on ne sait
plus trop où on en est ( enfin... moi )
ça m'ennuierai d'avoir repondre un truc de test,
get et synchrone : déjà, je préfère post et asynchrone
encore que get ou post pour du xml ? mais surtout
je vais ( peut-être ? ) faire un machin qui marche
alors que pour toi, ça queute.

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011

pour la différence asynchrone/synchrone, j'avais bien compris

pour le code

    if(window.XMLHttpRequest){
        // Firefox et autres
        requete = new XMLHttpRequest();
        if (requete.overrideMimeType){requete.overrideMimeType('text/xml')}
    }else if(window.ActiveXObject){
        // Internet Explorer
          try { requete = new ActiveXObject("Msxml2.XMLHTTP");
          }
          catch(e) {requete = new ActiveXObject("Microsoft.XMLHTTP");
          }
    }else{
        //non supporté par le navigateur
        requete = null;
    }
      
    requete.onreadystatechange = traitementXML;
    requete.open("GET", vurl , false);
    requete.send("");

pour la fonction

function traitementXML(){
alert('bouuu !');
    if (requete.readyState == 4){
        //traitement uniquement si le flux XML est complètement chargé; 4 = complet"
        if (requete.status == 200) {
  //traitement de mon flux XML
}
}
}

le alert(bouuu !) ne s'affiche pas sous FF3 en mode synchrone et sous FF2 en mode asynchrone
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
ci-dessous, ça fonctionne ( FF3 )

                 xml.htm :
<script>
    var   requete = new XMLHttpRequest();
   requete.onreadystatechange = function()
    {    if ( requete.readyState == 4 )      
      {  alert(requete.responseText );    }
    }   
   requete.open("POST", "xml.xml" , true);
   requete.send('')
</script>

      xml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
   
        <qui>
            gédéon

            <nom>teuzeumani</nom>
        </qui>
   

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
ça devrait être ok avec les version précédentes de FF
et tu le sais, pas du tout avec ie.
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011

ben j'ai modifié mon code en fonction du tiens

requete.open("POST", vurl , true);
    requete.send("");

ça marche pas !

bon en attendant de comprendre pourquoi ça marche pas, je vais détecté la version de FF et faire mon traitement en conséquence
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
Et la console javascript elle dit quoi?

<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)
Messages postés
626
Date d'inscription
samedi 28 septembre 2002
Statut
Membre
Dernière intervention
18 mai 2009
3
On te l'a dit et je le répète, n'utilises pas "onreadystatechange" en mode synchrone !
Messages postés
626
Date d'inscription
samedi 28 septembre 2002
Statut
Membre
Dernière intervention
18 mai 2009
3
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
@ xtremduke
il n'est pas en synchrone ?     requete.open("POST", vurl , true);
@rhan
as-tu essayé l'exemple que je te donne... tel quel ?
ça doit baigner.
sinon, xtremduke a raison : ton erreur est ailleurs
et maelob n'a pas trot : que dit la console d'erreurs ? ( voire firebug ? )

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
85
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
30 juin 2011

la console ne me renvois aucun message d'erreur

"On te l'a dit et je le répète, n'utilises pas "onreadystatechange" en mode synchrone !"

ok, (ça marche pour I.E, FF2) mais je fais comment dans ce cas pour récuperer mon flux XML ?
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
et tu remarqueras qu'il n'y a pas de test  if (requete.status == 200)  <hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>ok, (ça marche pour I.E, FF2)
et pour FF3 ?
>>mais je fais comment dans ce cas pour récuperer mon flux XML
comme tu le faisais
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]