Accueil > Forum > > > > Deroulement de script
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Forum
UTILISER UN .JSUTILISER UN .JS par zaikoe
Cliquez pour lire la suite par zaikoe
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|