2011-09-12 6 views
4

J'essaye d'employer JQuery bien que j'aie du mal à attendre avec succès qu'un appel d'ajax réussisse avant d'exécuter plus de code. Y a-t-il un moyen d'attendre qu'un ajax appelle? J'ai vu des exemples, mais il semble juste attendre aveuglément x quantité de secondes?comment attendre un appel ajax retourner

Merci, James

+0

Pouvez-vous montrer le code que vous utilisez? –

+0

Avez-vous essayé de lire les docs? – TJHeuvel

+0

il ya un événement appelé 'succès' –

Répondre

4

Oui, vous pouvez faire la demande synchrone:

var bodyContent = $.ajax({ 
     url: "script.php", 
     global: false, 
     type: "POST", 
     data: {id : this.getAttribute('id')}, 
     dataType: "html", 
     async:false, 
     success: function(msg){ 
     alert(msg); 
     } 
    } 
).responseText; 

Source: http://api.jquery.com/jQuery.ajax/

Cependant, les requêtes synchrones sont un pas en arrière, comme le moteur JS (et, dans certains navigateurs , l'interface utilisateur) bloquera jusqu'à la fin de la requête. Douglas Crockford a écrit à propos de synchronous requests:

La programmation synchrone est irrespectueuse et ne devrait pas être utilisée dans des applications qui sont utilisées par des personnes.
0

méthodes ajax de jQuery ont un gestionnaire de succès.

Vous devez mettre votre code que vous souhaitez déclencher en cas de succès dans une méthode attachée à ce gestionnaire.

Prenons l'exemple donné sur le site jQuery:

$.ajax({ 
    url: "test.html", 
    context: document.body, 
    success: function(){ 
    $(this).addClass("done"); 
    } 
}); 

Vous pouvez voir ici qu'il ya un gestionnaire success avec une méthode associée. Cette méthode s'exécutera lorsque la méthode ajax retournera avec succès.

Comme cela a été souligné dans d'autres réponses et dans le commentaire ci-dessous, vous pouvez maintenant utiliser différées au lieu de ce simple success handeler. Cela vous permet d'attacher plusieurs actions à chaque événement donné.

+0

différés sont la voie à suivre maintenant. –

+0

Ah sympa! Bon à savoir. –

0
  1. Utilisez async: false
  2. ou utiliser une fonction de rappel
1

Jetez un oeil à deferreds jQuery. Vous ne pouvez pas arrêter cela, mais vous pouvez appeler un autre code après le retour d'un appel AJAX.

// No way to stop. 
$.ajax(...); 
doSomething(); 

Mais avec deferds, vous pouvez:

$.ajax(...).success(function() { 
    doSomething(); 
}); 

Voir cet article.

http://www.erichynds.com/jquery/using-deferreds-in-jquery/

0

Vous pouvez utiliser le succès ou effectuer des rappels complets. Le succès se déclenche si le serveur renvoie un 200. Complete se déclenche lorsque la requête est terminée, quel que soit le statut de la réponse.

$.ajax({ 
    url: "/path/to/action", 
    success: function() { 
     alert("do something if it's successful"); 
    }, 
    complete: function(request, status) { 
     alert("do something when it's finished, regardless of success."); 
    } 
}); 

ou vous pouvez faire un appel synchrone:

$.ajax({ 
    url: "/path/to/action", 
    async: false 
}); 
Questions connexes