função jQuery.active

102

Eu estava tentando encontrar mais algumas informações sobre a seguinte função jQuery:

jQuery.active

Ele é descrito para testar o número de conexões ativas com um servidor e será avaliado como verdadeiro quando o número de conexões for zero.

Não consegui encontrar nenhuma informação sobre esta função no site da jQuery e queria saber se alguém sabia onde eu poderia.

RyanP13
fonte

Respostas:

163

Esta é uma variável que o jQuery usa internamente, mas não tinha motivo para esconder, então está lá para usar. Apenas um aviso, torna-se o jquery.ajax.activepróximo lançamento . Não há documentação porque está exposta, mas não na API oficial, muitas coisas são assim na verdade, como jQuery.cache(para onde jQuery.data()vai tudo ).

Estou supondo aqui pelo uso real na biblioteca, parece estar lá exclusivamente para oferecer suporte $.ajaxStart()e $.ajaxStop()(o que explicarei mais adiante), mas eles só se importam se é 0 ou não quando uma solicitação começa ou para. Mas, como não há motivo para ocultá-lo, ele é exposto para que você possa ver o número real de solicitações AJAX simultâneas em andamento.


Quando o jQuery inicia uma solicitação AJAX, isso acontece :

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

Isso é o que faz com que o $.ajaxStart()evento seja disparado, o número de conexões acabou de ir de 0 a 1 ( jQuery.active++não é 0 depois desta, e !0 == true), isso significa que a primeira das solicitações simultâneas atuais foi iniciada. A mesma coisa acontece na outra extremidade. Quando uma solicitação AJAX para (devido a um beforeSendaborto viareturn false ou uma função de chamada ajax completeé executada ):

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

Isso é o que faz com que o $.ajaxStop()evento seja disparado, o número de solicitações caiu para 0, significando que a última chamada AJAX simultânea foi concluída. Os outros manipuladores AJAX globais também são acionados ao longo do caminho.

Nick Craver
fonte
2
Eu vi isso descrito em um livro jQuery Novice to Ninja (2010)
jmav
@ Nick: De acordo com sua explicação sobre .ajaxStop será executado após cada chamada ajax concluída. Porém, ele será chamado se todas as chamadas ajax forem concluídas. Você pode me corrigir se eu estiver errado.
Kishore Relangi de
27
Isso agora é chamado de $.active, aliás.
Ryan Bigg
4
@RyanBigg não é $simplesmente um apelido para jQuery, então ambos ainda são verdadeiros?
arxpoetica
2
@ArxPoetica apenas se você estiver executando jQuerysem noConflict.
Ryan Bigg
19

Para quem tenta usar jQuery.active com solicitações JSONP (como eu), você precisará habilitá-lo com isto:

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

Lembre-se de que você precisará de um tempo limite em sua solicitação JSONP para detectar falhas.

Sean Bannister
fonte