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 :

evenement Onload() en dehors de <body>


Sujet :

JavaScript

  1. #1
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut evenement Onload() en dehors de <body>
    Bonjour,

    Alors voilà, j'ai une paghe qui contient du Ajax en masse. Au moment ou la page est chargée, 2 appels Ajax doivent être lancés. Chacun de ces appel va modifier le contenu de balises DIV.
    Mon problème - une fois de plus - est un problème de synchronisation, puisque qu'il semble que le script soit appeler alors que la page n'est pas complétement chargé, rendant inéficace mes appels ajax.

    Dans mon cas précis, je précise bien que je ne peux pas modifier la balise BODY de ma page, qui est générée par un script auquel je n'ai pas accès. J'écrit donc directement mon code entre les balises BODY de la page HTML.

    Pour tester, j'ai mis les appels à mes fonctions Ajax en fin de code HTML. Mais ça ne marche pas. J'ai donc - pour tester - rajouter des setTimeout a 500ms devant mes fonctions, et là ça marche. Cette solution digne d'un gros porc de peut rester tel quel.

    J'ai donc cherché a essayer de lancer mon appel lorsque ma page est intégralement chargée. Je pensait pouvoir résoudre le problème en mettant un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <script language="javascript">
    	window.onload = init();
    	function init()
    	{
    		UpdMenu(0); // fonction Ajax qui charge un menu dans une div
    		ChgQuestion({default_question}); // fonction ajax qui charge du code HTML dans une autre DIV	
    	}
    </script>
    mais seulement voilà, une et une seule des 2 fonctions peut être executés, la 2ème ! Je ne sais pas trop ce qui se passe en arriere plan au niveau du Ajax, et je ne sais pas si c'est le fait d'avoir 2 requetes simultané qui le fait merder, ou si c'est mon prog qui colle pas...

    Alors 1er question, est-ce que window.onload est le bon event a intercepter pour coller mes appels Ajax ?

    2e question : est-ce que ajax supporte des requetes simultanées comme je le fais ? Si c'est pas le cas, comment synchroniser l'appel de ma 2e fonction avec la fin de la 1er ?

    3e question, si oui et oui au 2 1er question, comment puis-je régler proprement mon problème ?

    En vous remerciant par avance !

    Edit : Oops, copier/coller un peu brutale, le {default_question} est remplacé par un nombre par le moteur de template au moment ou la page web est générée.
    Niveau JS, vous pouvez lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChgQuestion(10); // fonction ajax qui charge du code HTML dans une autre DIV

  2. #2
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.onload = init();
    Vu ce que tu veux faire, je pense que c'est juste.

    2.
    Je suis pas spécialiste en ajax, mais dans ta fonction init, tu appelles deux fonctions donc la 1ere devrait s'executer en premier et la 2eme en deuxieme comme tout bon langage de programmation
    Donc je pense pas que la question de requetes simultanées... y en a pas je pense dans le code que t'as filé.

    3.
    c'est là où je bloque, je vois pas de problème

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 60
    Par défaut
    1) window.onload : OK

    2) Utilises-tu bien un appel ajax synchrone et non pas asynchrone dans ta fonction UpdMenu(0); ?

  4. #4
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	 function UpdMenu(idmenu)
    	 {
    	  getXhr();
    	  xhr.onreadystatechange = function()
    	   {
    		if(xhr.readyState == 4 && xhr.status == 200)
    		 {
    		  document.getElementById('lst_filtre_menu').innerHTML = xhr.responseText;
    		 }
    	   }
    	  xhr.open("POST",'./ajax/showfiltre.php',true);
    	  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	  xhr.send("idf="+idmenu);
    	 }
    La, tu me poses un colle... Voici la fonction. Le ChgQuestion() est assez similaire, et identique dans le principe.

  5. #5
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    sans (), vu que sinon tu retourne LE RESULTAT DE LA FONCTION

    Ensuite, comment veux tu que ca marche si tu fait le window.onload=init alors que init n'existe pas encore, vu qu'elle est initialisée ligne suivante

    Dernière remarque, si un seul de tes AJAX se lance, c'est que ta méthode AJAX est mauvaise et écrase un appel avec l'autre. En effet, tu utilises un tutorial qui existe sur le web mais qui est FAUX !

    Voir ce message ci : http://www.developpez.net/forums/sho...92&postcount=5
    ----------------------------------------------------------
    En espérant que toutes ces indiquations t'aideront à résoudre ton problème,
    Fremy

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 60
    Par défaut
    C'est bien ce que je pensais, l'appel à AJAX se fait ici en mode asynchrone, c'est à dire que pendant que le serveur traite ta première fonction, javascript n'attend pas la réponse et continue en exécutant la fonction suivante.

    xhr.open("POST",'./ajax/showfiltre.php',true);
    --> la syntaxe est : xhr.open(méthode, url, IsAsynchrone);

    Si tu veux que la première fonction soit complètement exécutée avant que la seconde ne s'exécute, il faut passer en mode synchrone.

  7. #7
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Messieurs dames, vous fûtent utile !

    J'ai opté pour le coté obscur de la force (plus rapide, plus facile, plus séduisant...) en me contenant de remplacer le "true" par "false" dans mon appel pour le paramètre asynchrone.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open("POST",'./ajax/chgquestion.php',false);
    Ca semble marcher, pour IE et firefox. A voir sur des connexions de différentes rapidités (je test en local).

    Pour le reste, je me suis retrouvé dans un labirynthe de postes, et il y a bon nombre d'explications que je n'ai pas compris (ou approfondi), la faute à mon aversion naturelle pour le javascript dont la non standardisation est une insulte à une communauté batie sur la rigueur !

    Je vous remercie pour votre aide bienveillante, et je cliquera sur résolu dès que j'aurais constaté que ma solution ne gène personne ici

  8. #8
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Bon, bha je valide cette solution pour le moment !

    Hésitez pas à me reprendre si vous considérez que je suis une grosse buse qui ferait mieux de lire le problème jusqu'au bout si elle ne veut pas rencontrer desd problèmes chachés !

  9. #9
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    tu peux tjs lire le cours d'AJAX du site qui est court et bien fait, ca peut tjs aider quand on fait de l'AJAX
    Tuto AJAX

  10. #10
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Attention, il y a une nuance, je ne fait pas de l'Ajax, je le subit

  11. #11
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    c'est pour ca que tu devrais lire le cours, il est vraiment simple à comprendre et comme ça tu pourras lui rentrer dans le ***

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Evenement onload sur body et div
    Par Gregory.M dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/10/2008, 12h07
  2. utilisation du onLoad en dehors du <body>?
    Par makohsarah dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/07/2007, 17h19
  3. Evenement onload et méthode d'objet
    Par kaymak dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/03/2007, 10h56
  4. ajouter un evenement OnLoad a la balise body
    Par ]matmat[ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/02/2007, 01h57
  5. Evenement onLoad dans <body> et inclusion js dynamique
    Par Arnard dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2006, 15h48

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