jQuery.active функція


102

Я намагався знайти додаткову інформацію про наступну функцію jQuery:

jQuery.active

Він описаний для перевірки кількості активних підключень до сервера і оцінить істину, коли кількість підключень дорівнює нулю.

Я не міг знайти жодної інформації про цю функцію на сайті jQuery, і мені було цікаво, чи хтось знає, де я можу.

Відповіді:


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 були завершені. Чи можете ви, будь ласка, виправити мене, якщо я помиляюся.
Kishore Relangi

27
Зараз це називається $.active, btw.
Райан Бігг

4
@RyanBigg - це не $просто псевдонім для jQuery, так що все ще правда?
arxpoetica

2
@ArxPoetica, лише якщо ти працюєш jQueryбез noConflict.
Райан Бігг

19

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

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

Майте на увазі, що вам потрібен тайм-аут на ваш запит JSONP, щоб знайти помилки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.