jQuery.active işlevi


102

Aşağıdaki jQuery işlevi hakkında daha fazla bilgi bulmaya çalışıyordum:

jQuery.active

Bir sunucuya yapılan etkin bağlantıların sayısını test etmek için açıklanmıştır ve bağlantı sayısı sıfır olduğunda doğru olarak değerlendirilecektir.

JQuery sitesinde bu işlev hakkında herhangi bir bilgi bulamadım ve nerede olabileceğimi bilen var mı diye merak ediyordum.

Yanıtlar:


163

Bu, jQuery'nin dahili olarak kullandığı bir değişkendir, ancak saklanması için bir neden yoktur, bu yüzden kullanmak için orada. Sadece bir kafaları yukarı, o olur jquery.ajax.activesonraki salıverilmesini . Belgeleme yok çünkü açık ama resmi API'de yok, aslında pek çok şey böyle, jQuery.cache(her şeyin jQuery.data()gittiği yer) gibi.

Burada kütüphanedeki gerçek kullanıma göre tahmin ediyorum , sadece desteklemek için orada görünüyor $.ajaxStart()ve $.ajaxStop()(daha sonra açıklayacağım), ancak yalnızca bir istek başladığında veya durduğunda 0 olup olmadığını önemsiyorlar. Ancak, bunu saklamak için bir neden olmadığından, maruz kalındığında şu anda devam eden eşzamanlı AJAX isteklerinin gerçek sayısını görebilirsiniz .


JQuery bir AJAX isteği başlattığında, bu gerçekleşir :

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

Bu, $.ajaxStart()olayın tetiklenmesine neden olan şeydir , bağlantı sayısı 0'dan 1'e çıktı ( jQuery.active++bundan sonra 0 değil ve !0 == true), bu, mevcut eşzamanlı isteklerin ilkinin başladığı anlamına gelir . Aynı şey diğer tarafta da olur. AJAX isteği (çünkü durduğunda bir beforeSendaracılığı iptalereturn false veya ajax arama completefonksiyonu çalışır ):

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

Bu, $.ajaxStop()olayın tetiklenmesine neden olan şeydir , istek sayısı 0'a düşmüştür , yani son eşzamanlı AJAX çağrısı bitmiştir. Diğer küresel AJAX işleyicileri yol boyunca orada ateş de.


2
Bir jQuery Novice to Ninja (2010) kitabında anlatıldığını gördüm
jmav

@Nick: .ajaxStop açıklamanıza göre, tamamlanan her ajax çağrısından sonra çalıştırılacaktır. Ancak, tüm ajax çağrıları tamamlanmışsa çağrılacaktır. Yanlışsam lütfen beni düzeltebilir misin?
Kishore Relangi

27
Buna artık $.activebtw deniyor .
Ryan Bigg

4
@RyanBigg $sadece bir takma ad değil jQuery, yani ikisi de hala doğru mu?
arxpoetica

2
@ArxPoetica sadece jQueryonsuz koşuyorsanız noConflict.
Ryan Bigg

19

JSONP istekleriyle jQuery.active kullanmaya çalışan herkes için (benim gibi) bunu etkinleştirmeniz gerekir:

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

Hataları yakalamak için JSONP isteğinizde bir zaman aşımına ihtiyacınız olacağını unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.