Функция jQuery.active

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

jQuery.active

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

http://agilesoftwaretesting.com/?p=111

http://web.elctech.com/2008/11/10/jquery-ajax-loading-and-selenium-respec-testing/

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

Ответ 1

Это переменная 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++isn ' t 0 после этого, и !0 == true), это означает, что первый из текущих одновременных запросов запущен. То же самое происходит на другом конце. Когда запрос AJAX останавливается (из-за a beforeSend отменить через return false или ajax call complete работает):

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

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

Ответ 2

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

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

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