IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Deroulement de script XMLHttpRequest diff�rent sous IE et FF


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par d�faut [AJAX] Deroulement de script XMLHttpRequest diff�rent sous IE et FF
    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'];
    ?>

  2. #2
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Bonjour,
    ne serait-ce pas juste ta variable xhr qui devrait �tre d�clar�e en globale (car utilis�e dans plusieurs fonction) ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    var $xhr_fini;
    var xhr_object;
    function maj_messages() {
      xhr_object = null;
    ...
    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par d�faut
    J'ai essay�, �a ne change rien (de toutes fa�ons, j'avais v�rifi� les questions de port�e de variables)

    ... la suite de mon probl�me : j'ai supprim� ma fonction demarrer, pour essayer d'isoler le probleme ... et je tombe sur un truc de dingue : voici le code :

    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
    40
    41
    42
    43
    44
    45
    46
    47
     
    <html><head>
    <script type="text/javascript">
     
    var $xhr_fini;
    var xhr_object;
    function demarrer() {
      $xhr_fini = false;
      //########### ancien appel à 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;
      }
      xhr_object.onreadystatechange = function anonyme()
        {
          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;
          }
        }
      $data = "information=aaa&nocache="+Math.random();
      xhr_object.open("POST","./testtest.php",true);
      xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      alert("Avant envoi des donnees");
      xhr_object.send($data);
      alert("Apres envoi des donnees");
      alert ("Avant la fonction demarrer : "+$xhr_fini);
      $n=0 ;
      while (($xhr_fini == false) && ($n < 6)) {
        alert ("On est dans la boucle d'attente ("+$n+") : "+$xhr_fini+" : "+"xhr_object.readyState");
        $n++;
      }
    }
    window.onload = demarrer;
    </script>
    </head><body><div><p>Texte d'exemple</p></div></body></html>
    et l� :
    - sous IE : il s'arr�te carr�ment entre les deux alertes Apr�s envoi et Avant la

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par d�faut
    D�sol�, j'ai envoy� le message avant de l'avoir fini ... je continue :

    et l� :
    - sous IE : il s'arr�te carr�ment entre les deux alertes "Apr�s envoi des donnees" et "Avant la fonction d�marrer"
    - sous FF : il attend d'avoir fini tout le traitement "principal" pour s'occuper de l'�volution de xhr_object.readyState.

    J'ai l'impression d'�tre dans un mauvais r�ve
    Est-ce que quelqu'un peut m'expliquer !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par d�faut
    Je n'aurai sans doute jamais de r�ponse � mes questions puisque quand j'utilise un appel "r�cursif" avec un setTimeout, tout se passe bien.
    Merci quand m�me de votre aide.
    PB

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [AJAX] Emplacement du script
    Par Strab dans le forum G�n�ral JavaScript
    R�ponses: 11
    Dernier message: 07/06/2006, 16h07
  2. R�ponses: 2
    Dernier message: 23/04/2006, 21h02
  3. [CSS]Affichage diff�rent sous IE et FF
    Par arnaud_verlaine dans le forum Mise en page CSS
    R�ponses: 9
    Dernier message: 08/12/2005, 13h53
  4. Menu vertical diff�rent sous FF et IE
    Par Myogtha dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 1
    Dernier message: 06/12/2005, 00h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo