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

jQuery Discussion :

Mes fonctions ne s'exécutent pas dans l'ordre voulu


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut Mes fonctions ne s'exécutent pas dans l'ordre voulu
    Bonjour a tous,
    cela fait 2 jours que j'essaie de comprendre la raison du non fonctionnement d'une appli et je me suis rendu compte que c'est tout betement parce que les fonctions ne sont pas executées dans l'ordre que je veux:

    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
    $("#formulaire").submit(function(e) {
    	if(!e.isDefaultPrevented()) {
    		$.getJSON("/account/ajax/ac-get-city.php", { city: "paris" }, function(json) {
    				// traitement variables
    				$("#id_champ").val("valeur");
    				alert("fonction 1");
    			});
    		});
     
    		$.post(url, form.serialize(), function(msg) {	
    			// mettre a jour la bdd
    			alert("fonction 2");
    		});
    		return false; // empecher la soumission du formulaire
    	}
    });
    et mon problème est que alert("fonction 2") s'execute et s'affiche avant le alert("fonction 1") et donc le gros souci c'est que le formulaire est soumis avant que le champ #id_champ ait la nouvelle valaur!!

    please help!!
    MErci beucoup

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 207
    Par défaut
    Effectue ton après ton

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    justement non, je dois faire quelques traitement AVANT le post!!
    la solution que j'ai trouvé, et qui marche bien est de rajouter un setTimeout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    setTimeout(function() { 
    	// mettre a jour la bdd
    	alert("fonction 2");
    }, 2);
    ...
    2ms sont suffisantes pour laisser le temps au premier alert de s'executer...

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ce que tu ne semble pas vouloir comprendre, c'est qu'avec un appel AJAX, tu n'as absolument aucune garantie du temps que prendra la requête et de quelle réponse arrivera avant l'autre.
    Donc
    2ms sont suffisantes pour laisser le temps au premier alert de s'executer...
    est plus que périlleux comme affirmation.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    Ce que tu ne semble pas vouloir comprendre, c'est qu'avec un appel AJAX, tu n'as absolument aucune garantie du temps que prendra la requête et de quelle réponse arrivera avant l'autre.
    mais indépendamment de cela je veux afficher un alert("toto") AVANT le $.post avec l'appel Ajax. connais tu la raison??
    dans le code que j'ai mis, je demande juste d'executer le $.post avec un delai de 2ms

  6. #6
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Bonjour,

    les requêtes AJAX s'exécutant de manière asynchrone (en tache de fond) par défaut, le comportement que vous observez est tout à fait normal, le script continue de s'exécuter sans attendre le retour de vos requêtes.

    Si vous souhaitez rendre vos requêtes AJAX synchrones, il faut passer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.ajax({ /* Vos options */, async : false });
    Il n'est pas possible de spécifier cette option avec les raccourcis AJAX fournis par jQuery ($.post, $.load, $getJSON, ...).
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/09/2008, 11h25
  2. Le script serveur ne s'exécute pas dans une page aspx.
    Par laurent_diep dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/02/2007, 21h27
  3. Réponses: 4
    Dernier message: 11/09/2006, 17h46
  4. [VB6 débutant] mes projets ne s'exécutent pas
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 09/09/2006, 09h50
  5. La fonction CurrentDb() ne fonctionne pas dans une requête
    Par Sébastien Le Goyet dans le forum Access
    Réponses: 8
    Dernier message: 24/11/2005, 17h46

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