begin process at 2012 05 29 05:07:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript et le navigateur

 > 

Problème de compatibilité

 > 

Deroulement de script


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Deroulement de script

lundi 15 octobre 2007 à 22:38:07 | Deroulement de script

blatip

Bonjour,
Je suis nouveau, donc toutes mes excuses si je ne suis pas assez clair ...

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é
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
<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
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
<?php
  echo ">>>".$_POST['information'];
?>

mardi 16 octobre 2007 à 09:43:08 | Re : Deroulement de script

bultez

Membre Club


Bonjour,

    et pourtant... ça marche....


<html>
<head>
</head>
<body>
<div><p>Texte d'exemple</p></div>
<script type="text/javascript">
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;
  }
  xhr_object.onreadystatechange = function()
      {
      //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";
  xhr_object.open("POST","./test.php",true);
  xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  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;

</script>
</body></html>



    donc ?



                Cordialement            Bul         [mon Site]     [M'écrire]

mercredi 17 octobre 2007 à 00:10:12 | Re : Deroulement de script

blatip

Oui, ça marche parce que tu as enlevé la boucle while.
Mais si tu laisses cette boucle :
- avec IE, ça marche, mais il ne sort de la fonction maj_messages qu'une fois le traitement complet (jusqu'à l'état 4) donc il passe tranquillement la boucle while puisque $xhr_fini est déjà true
- avec FF, il ne traite qu'une fois (etat 1) puis semble s'arrêter dans son traitement puisqu'il se retrouve bloqué dans la boucle while : l'état n'évolue plus et $xhr_fini reste false.

Nota : cette boucle while "représente" les autres traitements que j'aurai à faire en parallèle sur cette page (et qui seront eux aussi constitués de xmlHttpRequest) d'où pour moi l'importance d'être clair sur le traitement du script.

D'ailleurs, une question peut-être liée à mon problème : Javascript est-il sensé être traité en (pseudo-) parallèle (objet) ou de manière sequentielle (une chose après l'autre) ?
mercredi 17 octobre 2007 à 08:39:07 | Re : Deroulement de script

bultez

Membre Club
en théorie javaScript est totalement asynchrone.
    si tu appelles une function, ça l'appelle et continue en séquence.
>>FF se retrouve bloqué dans la boucle while
    oui.
    if(xhr_object.readyState == 4) { fait tes traitements ici, appels fonctions... }

                Cordialement            Bul         [mon Site]     [M'écrire]

mercredi 17 octobre 2007 à 21:06:23 | Re : Deroulement de script

blatip

Le traitement de l'info rendue par le php est bien fait dans cet appel quand xhr_object.readyState==4
Mais je veux pouvoir continuer d'autres choses en parallèle sans attendre le retour (c'est pour ça que je me suis mis en asynchrone), ce que je simule par ma boucle while.
Comme je l'ai dit, ce qui me choque vraiement, c'est que IE et FF n'ont pas le même comportement, et en plus que dans les deux cas, il n'est pas bon : normalement, à la fin de ma fonction maj_messages, lorsque les données sont envoyées, il devrait retourner à ma fonction principale demarrer, se bloquer dans la boucle while en attendant les 4 appels successifs jusqu'à xhr_object.readyState=4 et donc que xhr_fini passe à vrai, et qu'il puisse sortir de la boucle while !
Et ce n'est jamais ce qui se passe, ni pour IE ni pour FF ...
Au moins, est-ce que mon analyse est correste ?

jeudi 25 octobre 2007 à 07:21:36 | Re : Deroulement de script

blatip

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


Cette discussion est classée dans : script, alert, fini, xhr, object


Répondre à ce message

Sujets en rapport avec ce message

Accents dans un script [ par GanJasTeR ] Bonjour à tous.Voila un ami m'a passé un script permettant de ne pas recharger une page en cliquant sur un lien. Ce script permet de charger le conten Accents dans un script [ par GanJasTeR ] Bonjour à tous.Voila un ami m'a passé un script permettant de ne pas recharger une page en cliquant sur un lien. Ce script permet de charger le conten Script Ajax Marche pas sous IE7, pas de bouton retour [ par verbiagecasselaicouill ] Seigneur je suis en train de couler...J'utilise un script Ajax posté sur ce site il y a longtemps par atlante pour charger les pages dans des div.Prob XMLHttpRequest pas de retour php [ par vol68 ] Hello et merci d'avance j'ai trouvé pratiquement ce que je cherchai avec le script ci dessous en le modifiant un peu, mais..... 1er probleme en ce qu Remplacer un onclick par requête Ajax [ par monoski ] Salut tout le monde, J'utilise jquery et un petit plugin intitulé progressbar qui permet de réaliser de jolie barre de progression. Dans la page de d Requête Ajax avec Jquery [ par monoski ] Bonsoir tout le monde j'aimerai bien passer à Jquery pour mes requêtes ajax qui sont codées actuellement en "dur" on va dire ^^ Alors ayant lu les do Problème de compatibilité avec Firefox [ par Sniark ] Bonjour à tous, Je suis débutant en javascript. J'ai un script qui récupère des valeurs sélectionnées dans des menus déroulants et retourne une liste Erreur d'envoi d'un script CGI [ par stardust69 ] Bonjour à tous, Je vous demande un peu d'aide pour le pilotage d'une caméra IP. Je suis en train de refaire une interface permettant de piloter les mo Fonction AJAX qui ne se déclenche pas [ par Shivan0910 ] Bonjour, Je sollicite de votre bienveillance dans la résolution de ce problème qui tend à m'épuiser J'ai deux fonctions function creationXHR() { var PHP passager une variable a une fonction ajax [ par ovatesfred ] Bonjour, je cherche à passer une varible de PHP vers une fonction javascrip (ajax). Cette fonction recharge une balise DIV, mon probleme est que la va


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales