jQuery.active-Funktion

102

Ich habe versucht, weitere Informationen zur folgenden jQuery-Funktion zu finden:

jQuery.active

Es wird beschrieben, wie die Anzahl der aktiven Verbindungen zu einem Server getestet wird, und es wird true ausgewertet, wenn die Anzahl der Verbindungen Null ist.

Ich konnte auf der jQuery-Site keine Informationen zu dieser Funktion finden und fragte mich, ob jemand wusste, wo ich könnte.

RyanP13
quelle

Antworten:

163

Dies ist eine Variable, die jQuery intern verwendet, aber keinen Grund zum Ausblenden hatte. Sie kann daher verwendet werden. Nur ein Kopf hoch, es wird die jquery.ajax.activenächste Veröffentlichung . Es gibt keine Dokumentation, weil sie verfügbar ist, aber nicht in der offiziellen API. Viele Dinge sind tatsächlich so, wie jQuery.cache(wo alles jQuery.data()hingeht).

Ich vermute hier durch die tatsächliche Nutzung in der Bibliothek, es scheint ausschließlich zur Unterstützung da zu sein $.ajaxStart()und $.ajaxStop()(was ich weiter erläutern werde), aber es ist ihnen nur wichtig, ob es 0 ist oder nicht, wenn eine Anfrage startet oder stoppt. Da es jedoch keinen Grund gibt, es auszublenden, können Sie die tatsächliche Anzahl der gleichzeitig laufenden AJAX-Anforderungen anzeigen.


Wenn jQuery eine AJAX-Anforderung startet, geschieht Folgendes :

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

Dies führt dazu, dass das $.ajaxStart()Ereignis ausgelöst wird. Die Anzahl der Verbindungen ist gerade von 0 auf 1 gestiegen ( jQuery.active++nicht 0 nach dieser und !0 == true). Dies bedeutet, dass die erste der aktuellen gleichzeitigen Anforderungen gestartet wurde. Das gleiche passiert am anderen Ende. Wenn eine AJAX - Anforderung stoppt (wegen eines beforeSendAbbruchs überreturn false oder einen Ajax - Aufruf completeFunktion läuft ):

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

Dies führt dazu, dass das $.ajaxStop()Ereignis ausgelöst wird. Die Anzahl der Anforderungen ist auf 0 gesunken, was bedeutet, dass der letzte gleichzeitige AJAX-Aufruf beendet wurde. Die anderen globalen AJAX-Handler feuern dort ebenfalls ein.

Nick Craver
quelle
2
Ich habe es in einem Buch jQuery Novice to Ninja (2010) beschrieben gesehen
jmav
@Nick: Gemäß Ihrer Erklärung von .ajaxStop wird nach jedem abgeschlossenen Ajax-Aufruf ausgeführt. Es wird jedoch aufgerufen, wenn alle Ajax-Aufrufe abgeschlossen wurden. Können Sie mich bitte korrigieren, wenn ich falsch liege?
Kishore Relangi
27
Dies heißt jetzt $.activeübrigens.
Ryan Bigg
4
@RyanBigg ist nicht $einfach ein Alias ​​für jQuery, also sind beide immer noch wahr?
Arxpoetica
2
@ArxPoetica nur, wenn Sie jQueryohne laufen noConflict.
Ryan Bigg
19

Für alle, die versuchen, jQuery.active mit JSONP-Anforderungen zu verwenden (wie ich), müssen Sie es folgendermaßen aktivieren:

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

Beachten Sie, dass Sie für Ihre JSONP-Anforderung eine Zeitüberschreitung benötigen, um Fehler zu erkennen.

Sean Bannister
quelle