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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 33
    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.

+ 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