104 votes

Fonction jQuery.active

J'essayais de trouver des informations supplémentaires sur la fonction jQuery suivante :

jQuery.active

Il est décrit pour tester le nombre de connexions actives à un serveur et évalue vrai lorsque le nombre de connexions est égal à zéro.

Je n'ai trouvé aucune information sur cette fonction sur le site de jQuery et je me demandais si quelqu'un savait où la trouver.

0 votes

Est-ce maintenant ou était-ce une fonction ?

164voto

Nick Craver Points 313913

Il s'agit d'une variable que jQuery utilise en interne, mais qu'il n'avait aucune raison de cacher, donc elle est là pour être utilisée. Juste une mise en garde, il devient jquery.ajax.active prochaine version . Il n'y a pas de documentation parce que c'est exposé mais pas dans l'API officielle, beaucoup de choses sont comme ça en fait, comme jQuery.cache (où tous les jQuery.data() va).

Je devine ici par réel dans la bibliothèque, il semble qu'elle soit là exclusivement pour supporter $.ajaxStart() y $.ajaxStop() (ce que j'expliquerai plus loin), mais ils ne se soucient que de savoir s'il est à 0 ou non lorsqu'une requête commence ou s'arrête. Mais, comme il n'y a pas de raison de le cacher, il est exposé pour que vous puissiez voir le nombre réel de simultanée Les requêtes AJAX sont en cours.


Lorsque jQuery lance une requête AJAX, cela arrive :

if ( s.global && ! jQuery.active++ ) {
  jQuery.event.trigger( "ajaxStart" );
}

C'est ce qui cause le $.ajaxStart() se déclenche, le nombre de connexions vient de passer de 0 à 1 ( jQuery.active++ n'est pas 0 après celui-ci, et !0 == true ), cela signifie que le premier des simultanée les demandes ont commencé. La même chose se produit à l'autre bout. Lorsqu'une requête AJAX s'arrête (à cause de a beforeSend interrompre via return false ou un appel ajax complete la fonction fonctionne ):

if ( s.global && ! --jQuery.active ) {
  jQuery.event.trigger( "ajaxStop" );
}

C'est ce qui cause le $.ajaxStop() pour se déclencher, le nombre de demandes est descendu à 0, ce qui signifie que la dernière simultanée Appel AJAX terminé. Le site autres gestionnaires globaux d'AJAX le feu en cours de route aussi.

2 votes

Je l'ai vu décrit dans un livre jQuery Novice to Ninja (2010)

0 votes

@Nick : Selon votre explication de .ajaxStop sera exécuté après chaque appel ajax complété. Mais, il sera appelé si tous les appels ajax ont été complétés. Pouvez-vous s'il vous plaît me corriger si je me trompe.

0 votes

@KishoreRelangi J'ai essayé d'être très explicite avec le 0 to 1 y number of requests went down to 0 bits au-dessus de ce qui est global et no chaque demande. C'est le moment où la première demande commence et où la dernière demande active se termine (ce qui, bien sûr, peut ne pas être dans l'ordre).

19voto

Sean Bannister Points 755

Pour ceux qui essaient d'utiliser jQuery.active avec des requêtes JSONP (comme moi), vous devez l'activer avec ceci :

jQuery.ajaxPrefilter(function( options ) {
    options.global = true;
});

Gardez à l'esprit que vous aurez besoin d'un délai d'attente sur votre requête JSONP pour rattraper les échecs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X