Función jQuery.active

102

Estaba tratando de encontrar más información sobre la siguiente función jQuery:

jQuery.active

Se describe para probar el número de conexiones activas a un servidor y se evaluará como verdadero cuando el número de conexiones sea cero.

No pude encontrar ninguna información sobre esta función en el sitio jQuery y me preguntaba si alguien sabía dónde podría hacerlo.

RyanP13
fuente

Respuestas:

163

Esta es una variable que jQuery usa internamente, pero no tenía ninguna razón para esconderse, por lo que está ahí para usar. Solo un aviso, se convierte en el jquery.ajax.activepróximo lanzamiento . No hay documentación porque está expuesta pero no en la API oficial, muchas cosas son así en realidad, como jQuery.cache(a dónde jQuery.data()va todo).

Supongo que aquí, por el uso real en la biblioteca, parece estar allí exclusivamente para admitir $.ajaxStart()y $.ajaxStop()(que explicaré más adelante), pero solo les importa si es 0 o no cuando una solicitud comienza o se detiene. Pero, dado que no hay razón para ocultarlo, está expuesto a que puede ver el número real de solicitudes AJAX simultáneas que se están produciendo actualmente.


Cuando jQuery inicia una solicitud AJAX, esto sucede :

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

Esto es lo que hace que se active el $.ajaxStart()evento, el número de conexiones simplemente pasó de 0 a 1 ( jQuery.active++no es 0 después de este, y !0 == true), esto significa que comenzó la primera de las solicitudes simultáneas actuales . Lo mismo sucede en el otro extremo. Cuando se detiene una solicitud AJAX (debido a un beforeSendaborto mediantereturn false o se ejecuta una función de llamada ajaxcomplete ):

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

Esto es lo que hace que se active el $.ajaxStop()evento, el número de solicitudes bajó a 0, lo que significa que finalizó la última llamada AJAX simultánea . Los otros controladores AJAX globales también se activan allí en el camino.

Nick Craver
fuente
2
Lo vi descrito en un libro jQuery Novice to Ninja (2010)
jmav
@Nick: Según su explicación de .ajaxStop se ejecutará después de que se complete cada llamada ajax. Pero, se llamará si se completaron todas las llamadas ajax. ¿Puede corregirme si me equivoco?
Kishore Relangi
27
Esto ahora se llama $.active, por cierto.
Ryan Bigg
4
@RyanBigg no es $simplemente un alias de jQuery, ¿entonces ambos siguen siendo ciertos?
arxpoetica
2
@ArxPoetica solo si está ejecutando jQuerysin noConflict.
Ryan Bigg
19

Para cualquiera que intente usar jQuery.active con solicitudes JSONP (como yo), deberá habilitarlo con esto:

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

Tenga en cuenta que necesitará un tiempo de espera en su solicitud JSONP para detectar fallas.

Sean Bannister
fuente