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.