fungsi jQuery.active

102

Saya mencoba menemukan beberapa informasi lebih lanjut tentang fungsi jQuery berikut:

jQuery.active

Ini dijelaskan untuk menguji jumlah koneksi aktif ke server dan akan dievaluasi benar ketika jumlah koneksi nol.

Saya tidak dapat menemukan informasi apa pun tentang fungsi ini di situs jQuery dan bertanya-tanya apakah ada yang tahu di mana saya bisa.

RyanP13
sumber

Jawaban:

163

Ini adalah variabel yang digunakan jQuery secara internal, tetapi tidak punya alasan untuk disembunyikan, jadi itu ada untuk digunakan. Tunggu dulu, ini menjadi jquery.ajax.activerilis berikutnya . Tidak ada dokumentasi karena terekspos tetapi tidak di API resmi, banyak hal seperti ini sebenarnya, seperti jQuery.cache(kemana semua jQuery.data()pergi).

Saya menebak di sini dengan penggunaan aktual di perpustakaan, tampaknya ada di sana secara eksklusif untuk mendukung $.ajaxStart()dan $.ajaxStop()(yang akan saya jelaskan lebih lanjut), tetapi mereka hanya peduli jika 0 atau tidak ketika permintaan dimulai atau berhenti. Tapi, karena tidak ada alasan untuk menyembunyikannya, Anda dapat melihat jumlah sebenarnya dari permintaan AJAX simultan yang sedang terjadi.


Ketika jQuery memulai permintaan AJAX, ini terjadi :

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

Inilah yang menyebabkan $.ajaxStart()peristiwa diaktifkan, jumlah koneksi hanya berubah dari 0 menjadi 1 ( jQuery.active++bukan 0 setelah ini, dan !0 == true), ini berarti permintaan simultan pertama saat ini dimulai. Hal yang sama terjadi di ujung yang lain. Ketika permintaan AJAX berhenti (karena suatu beforeSendbatalkan melaluireturn false atau ajax panggilan completefungsi berjalan ):

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

Inilah yang menyebabkan $.ajaxStop()peristiwa diaktifkan, jumlah permintaan turun menjadi 0, artinya panggilan AJAX serentak terakhir selesai. The penangan AJAX global lainnya api di sana sepanjang jalan juga.

Nick Craver
sumber
2
Saya melihatnya dijelaskan dalam buku jQuery Novice to Ninja (2010)
jmav
@Nick: Sesuai penjelasan Anda tentang .ajaxStop akan dijalankan setelah setiap panggilan ajax selesai. Tapi, itu akan dipanggil jika semua panggilan ajax selesai. Bisakah Anda mengoreksi saya jika saya salah.
Kishore Relangi
27
Ini sekarang disebut $.active, btw.
Ryan Bigg
4
@RyanBigg bukan $sekadar alias untuk jQuery, jadi keduanya masih benar?
arxpoetica
2
@ArxPoetica hanya jika Anda berjalan jQuerytanpa noConflict.
Ryan Bigg
19

Bagi siapa pun yang mencoba menggunakan jQuery.active dengan permintaan JSONP (seperti saya dulu), Anda harus mengaktifkannya dengan ini:

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

Perlu diingat bahwa Anda memerlukan waktu tunggu pada permintaan JSONP Anda untuk mendeteksi kegagalan.

Sean Bannister
sumber