jQuery.active funzione


102

Stavo cercando di trovare ulteriori informazioni sulla seguente funzione jQuery:

jQuery.active

Viene descritto per testare il numero di connessioni attive a un server e valuterà vero quando il numero di connessioni è zero.

Non sono riuscito a trovare alcuna informazione su questa funzione sul sito jQuery e mi chiedevo se qualcuno sapesse dove potevo.

Risposte:


163

Questa è una variabile che jQuery usa internamente, ma non aveva motivo di nascondersi, quindi è lì da usare. Solo un avvertimento, diventa la jquery.ajax.activeprossima versione . Non c'è documentazione perché è esposta ma non nell'API ufficiale, molte cose in realtà sono così, come jQuery.cache(dove jQuery.data()va tutto).

Immagino che qui dall'uso effettivo nella libreria, sembra essere lì esclusivamente per supportare $.ajaxStart()e $.ajaxStop()(cosa spiegherò più avanti), ma a loro interessa solo se è 0 o meno quando una richiesta inizia o si interrompe. Ma, poiché non c'è motivo di nasconderlo, è esposto a te puoi vedere il numero effettivo di richieste AJAX simultanee attualmente in corso.


Quando jQuery avvia una richiesta AJAX, questo accade :

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

Questo è ciò che causa l'attivazione $.ajaxStart()dell'evento, il numero di connessioni è appena passato da 0 a 1 ( jQuery.active++non è 0 dopo questo, e !0 == true), questo significa che è iniziata la prima delle richieste simultanee correnti . La stessa cosa accade dall'altra parte. Quando una richiesta AJAX si interrompe (a causa di un beforeSendinterruzione tramitereturn false o viene eseguita una funzione di chiamata ajaxcomplete ):

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

Questo è ciò che causa l'attivazione $.ajaxStop()dell'evento, il numero di richieste è sceso a 0, il che significa che l'ultima chiamata AJAX simultanea è terminata. Anche gli altri gestori AJAX globali si attivano lungo la strada.


2
L'ho visto descritto in un libro jQuery Novice to Ninja (2010)
jmav

@ Nick: come da tua spiegazione, .ajaxStop verrà eseguito dopo ogni chiamata ajax completata. Ma verrà chiamato se tutte le chiamate ajax sono state completate. Puoi correggermi se sbaglio.
Kishore Relangi

27
Questo è ora chiamato $.active, btw.
Ryan Bigg

4
@ RyanBigg non è $semplicemente un alias per jQuery, quindi entrambi sono ancora veri?
arxpoetica

2
@ArxPoetica solo se corri jQuerysenza noConflict.
Ryan Bigg

19

Per chiunque cerchi di utilizzare jQuery.active con richieste JSONP (come me), dovrai abilitarlo con questo:

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

Tieni presente che avrai bisogno di un timeout sulla tua richiesta JSONP per rilevare gli errori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.