jQuery.active функция

102

Я пытался найти дополнительную информацию о следующей функции jQuery:

jQuery.active

Он описан для проверки количества активных подключений к серверу и будет оценивать истину, когда количество подключений равно нулю.

Я не смог найти никакой информации об этой функции на сайте jQuery, и мне было интересно, знает ли кто-нибудь, где я могу.

RyanP13
источник

Ответы:

163

Это переменная, которую jQuery использует внутри себя, но у нее не было причин скрывать, поэтому ее можно использовать. Предупреждаем, он станет jquery.ajax.activeследующим релизом . Документации нет, потому что она представлена, но не в официальном API, на самом деле многие вещи похожи на это jQuery.cache(где все jQuery.data()идет).

Я предполагаю, что по фактическому использованию в библиотеке, кажется, что он существует исключительно для поддержки $.ajaxStart()и $.ajaxStop()(что я объясню далее), но их волнует только то, 0 или нет, когда запрос запускается или останавливается. Но, поскольку нет причин скрывать это, вы можете увидеть фактическое количество одновременных запросов AJAX, выполняемых в настоящее время.


Когда jQuery запускает запрос AJAX, происходит следующее :

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

Это то, что вызывает $.ajaxStart()срабатывание события: количество подключений только что изменилось с 0 до 1 ( jQuery.active++не 0 после этого и !0 == true), это означает, что запущен первый из текущих одновременных запросов. То же самое происходит на другом конце. Когда запрос AJAX останавливается (из - за более beforeSendпрерывание черезreturn false или вызов AJAX completeфункции пробеги ):

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

Это то, что вызывает $.ajaxStop()срабатывание события: количество запросов упало до 0, что означает, что последний одновременный вызов AJAX завершился. В других обработчиках глобального AJAX в огнь там по пути , а также.

Ник Крейвер
источник
2
Я видел это описано в книге jQuery Novice to Ninja (2010)
jmav
@Nick: Согласно вашему объяснению .ajaxStop будет выполняться после завершения каждого вызова ajax. Но он будет вызываться, если все вызовы ajax были завершены. Не могли бы вы поправить меня, если я ошибаюсь.
Кишор Реланги
27
Теперь это называется $.active, кстати.
Райан Бигг
4
@RyanBigg - это не $просто псевдоним jQuery, так что оба они все еще верны?
arxpoetica
2
@ArxPoetica, только если вы работаете jQueryбез него noConflict.
Райан Бигг
19

Для тех, кто пытается использовать jQuery.active с запросами JSONP (как и я), вам нужно включить его следующим образом:

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

Имейте в виду, что вам понадобится тайм-аут в вашем запросе JSONP, чтобы отловить сбои.

Шон Баннистер
источник