it-swarm-eu.dev

jquery :: ajaxStop () contre jquery :: ajaxComplete ()

Qui doit être utilisé à quel moment.

Dans la documentation sur http://api.jquery.com/ :

Pour ajaxStop (), il dit:

Description: enregistrez un gestionnaire à appeler lorsque toutes les demandes Ajax sont terminées. Il s'agit d'un événement Ajax.

Et pour ajaxComplete (), il dit:

Description: enregistrez un gestionnaire à appeler lorsque les demandes Ajax seront terminées. Il s'agit d'un événement Ajax.

D'après ce que je peux voir ajaxComplete () est plus flexible en raison de:

Tous les gestionnaires ajaxComplete sont appelés, quelle que soit la requête Ajax terminée. Si nous devons différencier les demandes, nous pouvons utiliser les paramètres passés au gestionnaire. Chaque fois qu'un gestionnaire ajaxComplete est exécuté, il reçoit l'objet d'événement, l'objet XMLHttpRequest et l'objet settings qui ont été utilisés dans la création de la demande.

Quelqu'un peut-il expliquer à quoi chacun est destiné et quelle est son utilisation appropriée? Dans une application que j'ai construite récemment, je comptais sur ajaxStop () pour tirer lorsque mes appels ajax étaient terminés. Je voudrais ensuite analyser les données retournées pour le résultat de l'opération côté serveur. Maintenant, je commence à me demander si j'aurais dû utiliser ajaxComplete () à la place ou une combinaison des deux pour diverses situations.

Les pensées sont appréciées.

38
Chris

Eh bien, la version courte est qu'ils servent à des fins différentes, donc la réponse serait l'option "une combinaison des deux pour diverses situations". Les règles de base sont les suivantes:

  • .ajaxComplete() - fonctionne pour chaque requête qui se termine, utilisez-la lorsque vous voulez faire quelque chose avec chaque demande/résultat. Notez que cela ne remplace pas le gestionnaire success, car les données analysées ne sont pas l'un des arguments (et elles s'exécutent même en cas d'erreur) - vous voudrez peut-être .ajaxSuccess() dans certaines situations par demande à la place.
  • .ajaxStop() - s'exécute lorsque chaque lot de demandes se termine, vous l'utilisez généralement en combinaison avec .ajaxStart() pour des choses comme afficher/masquer un indicateur "Chargement ..." quelconque - ou pour faire autre chose une fois un lot de AJAX = demande des finitions, comme une dernière étape principale.

Si vous utilisez ceci pour analyser vos données, il y a probablement une meilleure façon, dans ce cas $.ajaxSetup() , où vous pouvez spécifier un gestionnaire success qui obtient le des données déjà analysées (par exemple, les réponses JSON seront des objets), comme ceci:

$.ajaxSetup({
  success: function(data) { 
    //do something with data, for JSON it's already an object, etc.
  }
});
58
Nick Craver

ajaxComplete est appelé chaque fois qu'une requête ajax se termine, avec succès ou avec une erreur.

ajaxStop est appelée lorsque toutes les requêtes ajax sont terminées. Contrairement à ajaxComplete, il ne sera pas appelé s'il y a encore une demande en cours.

Vous devez utiliser le premier si l'opération que vous souhaitez effectuer doit être effectuée pour chaque demande ajax.

8
sje397

En général, vous souhaitez utiliser ajaxComplete. Ceci est dû au fait que ajaxStop ne sera déclenché que lorsqu'il n'y aura plus de demandes ajax en attente de retour. Cela peut ne pas sembler différent lorsque vous envoyez une demande ajax à la fois, mais imaginez que le réseau ralentit après l'envoi de la demande A et, lorsque la demande B est envoyée 5 secondes plus tard, elle revient plus tôt que la demande A. . puis ajaxStop ne sera déclenché qu'une seule fois après le retour de la demande A tandis que ajaxComplete se déclenchera les deux fois.

La situation dans laquelle vous utiliseriez ajaxStop est lorsque vous envoyez plusieurs demandes ajax en une seule fois ... par exemple de soumettre une série de 3 formulaires ... et que vous souhaitez être averti lorsque tous les 3 auront réussi Bien sûr, vous pouvez obtenir la même fonctionnalité avec un compteur dans ajaxComplete

Cependant, à partir des sons de votre question ... vous souhaitez analyser les données de chaque réponse ajax ... cela se fait généralement dans le rappel de succès ajax, par exemple.

$.ajax({
   url: "blah",
   data: "blah",
   success: function (data) { /* Code in here */ }
});
3
David Tang