Fonction jQuery.active

102

J'essayais de trouver plus d'informations sur la fonction jQuery suivante:

jQuery.active

Il est décrit pour tester le nombre de connexions actives à un serveur et évaluera vrai lorsque le nombre de connexions est nul.

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

RyanP13
la source

Réponses:

163

C'est une variable que jQuery utilise en interne, mais n'avait aucune raison de se cacher, elle est donc là pour être utilisée. Juste un avertissement, il devient la jquery.ajax.activeprochaine version . Il n'y a pas de documentation car elle est exposée mais pas dans l'API officielle, beaucoup de choses sont comme ça en fait, comme jQuery.cache(où tout jQuery.data()va).

J'imagine ici par l' utilisation réelle dans la bibliothèque, il semble être là exclusivement pour prendre en charge $.ajaxStart()et $.ajaxStop()(ce que je vais expliquer plus loin), mais ils ne se soucient que de savoir si c'est 0 ou non lorsqu'une requête démarre ou s'arrête. Mais, comme il n'y a aucune raison de le cacher, il est exposé à vous pouvez voir le nombre réel de requêtes AJAX simultanées actuellement en cours.


Lorsque jQuery démarre une requête AJAX, cela se produit :

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

C'est ce qui provoque le $.ajaxStart()déclenchement de l' événement, le nombre de connexions est simplement passé de 0 à 1 ( jQuery.active++n'est pas 0 après celui-ci, et !0 == true), cela signifie que la première des requêtes simultanées actuelles a commencé. La même chose se produit à l'autre bout. Lorsqu'une requête AJAX s'arrête (en raison d' un beforeSendabandon viareturn false ou d'une fonction d' appel ajax completes'exécute ):

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

C'est ce qui provoque le $.ajaxStop()déclenchement de l' événement, le nombre de requêtes est passé à 0, signifiant que le dernier appel AJAX simultané est terminé. Les autres gestionnaires AJAX globaux se déclenchent également en cours de route.

Nick Craver
la source
2
Je l'ai vu décrit dans un livre jQuery Novice to Ninja (2010)
jmav
@Nick: Selon votre explication de .ajaxStop sera exécuté après chaque appel ajax terminé. Mais, il sera appelé si tous les appels ajax ont été terminés. Pouvez-vous me corriger si je me trompe.
Kishore Relangi
27
Cela s'appelle maintenant $.active, btw.
Ryan Bigg
4
@RyanBigg n'est pas $simplement un alias pour jQuery, donc les deux sont toujours vrais?
arxpoetica
2
@ArxPoetica uniquement si vous utilisez jQuerysans noConflict.
Ryan Bigg
19

Pour quiconque essaie d'utiliser jQuery.active avec des requêtes JSONP (comme je l'étais), vous devrez l'activer avec ceci:

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

Gardez à l'esprit que vous aurez besoin d'un délai d'expiration sur votre demande JSONP pour détecter les échecs.

Sean Bannister
la source