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 :

Contrôler l'ordre d'execution


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 137
    Points : 92
    Points
    92
    Par défaut Contrôler l'ordre d'execution
    Bonjour,

    voilà mon 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
     
    		function addEventSimple(obj,evt,fn){
    			if (obj.addEventListener)
    				obj.addEventListener(evt,fn,false);
    			else if (obj.attachEvent)
    				obj.attachEvent('on'+evt,fn);
    		}
    		var test = document.getElementById('image_animation_back');
    	addEventSimple(test,'click', function()
    	{
    		var redir = this.href;
    		this.href = '#';
    		go_1();
    		document.location.href=redir;
    	})
    ca consiste à enlever le(s) lien(s) des balise de lien exécuter un script lorsque le client clique et finalement le rediriger sur le lien qui était présent dans la balise. Sauf que je voudrais être sûr que ma fonction go_1() qui elle même contient une fonction soit bien exécutée jusqu'au bout

    si toutefois ca peut aider le code de go_1:
    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
     
    function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } catch (e) {
    			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			            }
    				}
    				else { // XMLHttpRequest non supporté par le navigateur 
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    				   xhr = false; 
    				} 
                                    return xhr
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    			function go_1(){
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('image_animation_h1').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","delete2.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				idAddress = 1;
    				xhr.send("idAddress="+idAddress);
     
     
    				}
    voilà d'avance merci à ceux qui prendront le temps de me répondre.

  2. #2
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    même question que ici (il y a 15 jours ) : http://www.developpez.net/forums/d11...ntre-fonction/


    en gros tu utilises un appels ajax asynchrone(qui n'attend pas la réponse pour poursuivre) donc ta requête n'est en général pas terminé lors de la redirection de la page.


    la solution la plus simple et la plus sale est de simplement changer ton appel asynchrone en appel synchrone.


    mais ça bloque ton code et c'est déconseillé.

    la solution asynchrone correcte est donc que tu dois alors mettre la suite de tes instructions non pas APèS ta requête ajax mais dans la fonction succes (onReadyStateChange) de celle-ci. (et pour faire ça tout beau tout propre, tu peux même afficher un popup/div pour demander au visiteur de patienter pendant la redirection).



    sinon mieux encore, faire comme fb et google des liens de redirection (et de sauvegarde?) du genre :

    http://www.google.be/url?sa=t&rct=j&...K17DgFv9vFvQug

    http://www.facebook.com/l.php?u=http...OejabN5IPbDu9Q

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://www.cible.fr/">lien</a>
    de le convertir en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://www.monsite.com/goto.php?url=www.cible.fr">lien</a>
    avec sur ton serveur une page goto qui sauve tes données et qui fait une redirection php sur la page passée par l'url.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 137
    Points : 92
    Points
    92
    Par défaut merci
    hello willpower,

    après lecture de ces réponses j'ai bien compris je t en remercie.

    j'ai donc placé la redirection une fois ce contrôle effectué, j'ai mis la reéponse dans le callback.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(xhr.readyState == 4 && xhr.status == 200)
     {
    	leselect = xhr.responseText;
    	// On se sert de innerHTML pour rajouter les options a la liste
    	document.getElementById('image_animation_h1').innerHTML = leselect;
            // redirection seulement si on a recu l'information:
            document.location.href=link;
    }

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

Discussions similaires

  1. [M2] structure multi-modules et ordre d'execution
    Par dvicente72 dans le forum Maven
    Réponses: 11
    Dernier message: 03/06/2007, 20h41
  2. Ordre d'execution et httpRequest
    Par sourize dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/03/2007, 10h33
  3. Contrôler l'ordre de création de classes globales
    Par 10_GOTO_10 dans le forum C++
    Réponses: 4
    Dernier message: 24/04/2006, 20h39
  4. Réponses: 5
    Dernier message: 29/12/2005, 13h47
  5. probleme ordre d'execution de ma page asp
    Par Shosho dans le forum ASP
    Réponses: 5
    Dernier message: 10/05/2005, 14h51

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