Cara menggunakan AJAXSTOP pada JavaScript
I would do something like this in include.js:
This sets a (hopefully unique) variable to the In CasperJS you would probably do something like the following to wait for the change in the request status. This uses adds a new function to the
And use it like this:
or this: Saya memiliki widget yang memiliki kontrol javascript yang menyertainya. Jika widget hadir saat halaman admin widget dimuat, kontrol berfungsi dengan benar. Ketika saya menambahkan widget baru, mereka tidak berfungsi dengan benar, saya mendapatkan markup, tetapi tidak ada efek javascript yang berlaku. Jika saya menyimpan widget baru, ketika formulir dimuat kembali, kontrol dibuat dengan benar dan sekarang berfungsi. Menyegarkan halaman juga memperbaiki masalah, tetapi hanya untuk widget yang ada. Widget baru masih memiliki masalah ini. Secara khusus saya menjalankan pilih pada input pilih pada titik-titik ini:
Saya telah memverifikasi bahwa kode saya dijalankan pada setiap acara seperti yang diinginkan, tetapi hasilnya tidak seperti yang diharapkan. Berikut ini adalah plugin pengujian yang menunjukkan masalah ini: https://gist.github.com/Tarendai/8466299 Anda akan melihat saya memiliki penghitung yang bertambah dengan setiap elemen pilih yang ditemukannya dapat dikonversi. Catatan:
Jadi, bagaimana cara membuat kontrol pilih bekerja tanpa menyuruh pengguna menyegarkan / mengklik simpan sebelum membuat perubahan? Dengan menggunakan jQuery, bagaimana saya bisa membatalkan / membatalkan permintaan Ajax yang belum saya terima jawabannya? Jawaban: Sebagian besar metode jQuery Ajax mengembalikan
objek XMLHttpRequest (atau yang setara), jadi Anda bisa menggunakannya Lihat dokumentasi:
UPDATE: Pada jQuery 1.5 objek yang dikembalikan adalah pembungkus untuk objek XMLHttpRequest asli yang disebut jqXHR. Objek ini muncul untuk mengekspos semua properti dan metode asli sehingga contoh di atas masih berfungsi. Lihat Objek jqXHR (dokumentasi API jQuery). UPDATE 2: Pada jQuery 3, metode ajax sekarang mengembalikan janji dengan metode tambahan (seperti batalkan), jadi kode di atas masih berfungsi, meskipun
objek yang dikembalikan bukan UPDATE 3 : Anda tidak dapat mengingat permintaan tetapi Anda dapat menetapkan nilai batas waktu setelah mana tanggapan akan diabaikan. Lihat halaman ini untuk opsi jquery AJAX. Saya percaya bahwa panggilan balik kesalahan Anda akan dipanggil jika periode batas waktu terlampaui. Sudah ada batas waktu default pada setiap permintaan AJAX. Anda juga dapat menggunakan batalkan () metode pada objek permintaan tapi, sementara itu akan menyebabkan klien untuk berhenti mendengarkan untuk acara tersebut, itu mungkin mungkin tidak akan menghentikan server dari memprosesnya. Ini asinkron permintaan yang tidak , artinya setelah dikirim, itu ada. Jika server Anda memulai operasi yang sangat mahal karena permintaan AJAX, yang terbaik yang dapat Anda lakukan adalah membuka server Anda untuk mendengarkan permintaan pembatalan, dan mengirim permintaan AJAX terpisah yang memberitahukan server untuk menghentikan apa pun yang dilakukannya. Jika tidak, abaikan saja respons AJAX. Simpan panggilan yang Anda lakukan dalam array, lalu panggil xhr.abort () di masing-masingnya. CAVEAT BESAR: Anda dapat membatalkan permintaan, tetapi itu hanya sisi klien. Sisi server masih dapat memproses permintaan. Jika Anda menggunakan sesuatu seperti PHP atau ASP dengan data sesi, data sesi dikunci sampai ajax selesai. Jadi, agar pengguna dapat terus menjelajahi situs web, Anda harus menelepon session_write_close (). Ini menyimpan sesi dan membuka kunci sehingga halaman lain yang menunggu untuk melanjutkan akan dilanjutkan. Tanpa ini, beberapa halaman dapat menunggu kunci dihapus. Permintaan AJAX mungkin tidak lengkap dalam urutan dimulai. Alih-alih membatalkan, Anda dapat memilih untuk mengabaikan semua respons AJAX kecuali yang paling baru:
Garis besar kode yang kasar:
Demo di jsFiddle Kami hanya harus mengatasi masalah ini dan menguji tiga pendekatan yang berbeda.
Dalam kasus kami, kami memutuskan untuk menggunakan pendekatan # 3 karena menghasilkan lebih sedikit beban untuk server. Tapi saya tidak 100% yakin jika jQuery menjamin panggilan metode .complete () -, ini bisa menghasilkan situasi jalan buntu. Dalam pengujian kami, kami tidak dapat mereproduksi situasi seperti itu. Itu selalu praktik terbaik untuk melakukan sesuatu seperti ini.
Tetapi jauh lebih baik jika Anda memeriksa pernyataan if untuk memeriksa apakah permintaan ajax adalah nol atau tidak. Panggil saja xhr. batalkan () apakah itu objek jquery ajax atau objek XMLHTTPRequest asli. contoh:
Saya sedang melakukan solusi pencarian langsung dan perlu membatalkan permintaan yang tertunda yang mungkin memakan waktu lebih lama dari permintaan terbaru / terbaru. Dalam kasus saya, saya menggunakan sesuatu seperti ini:
Seperti yang dicatat oleh banyak orang di utas, hanya karena permintaan dibatalkan di sisi klien, server masih akan memproses permintaan tersebut. Ini menciptakan beban yang tidak perlu di server karena melakukan pekerjaan yang kami berhenti mendengarkan di front-end. Masalah yang saya coba selesaikan (yang mungkin juga dijalankan oleh orang lain) adalah ketika pengguna memasukkan informasi dalam bidang input, saya ingin menjalankan permintaan untuk jenis nuansa Google Instan. Untuk menghindari memecat permintaan yang tidak perlu dan untuk menjaga kenyamanan front-end, saya melakukan hal berikut:
Ini pada dasarnya akan mengirim satu permintaan setiap 150ms (variabel yang dapat Anda sesuaikan untuk kebutuhan Anda sendiri). Jika Anda mengalami kesulitan memahami apa yang sebenarnya terjadi di sini, log Cukup gunakan ajax.abort () misalnya Anda dapat membatalkan permintaan ajax yang tertunda sebelum mengirim yang lain seperti ini
Anda dapat membatalkan panggilan ajax berkelanjutan dengan menggunakan ini
tidak ada cara yang dapat diandalkan untuk melakukannya, dan saya bahkan tidak akan mencobanya, begitu permintaan sedang berjalan; satu - satunya cara untuk bereaksi secara wajar adalah dengan mengabaikan respons. dalam kebanyakan kasus, itu dapat terjadi dalam situasi seperti: pengguna mengklik terlalu sering pada tombol yang memicu banyak XHR berturut-turut, di sini Anda memiliki banyak pilihan, baik memblokir tombol sampai XHR dikembalikan, atau bahkan tidak memicu XHR baru sementara yang lain sedang menjalankan petunjuk pengguna untuk bersandar - atau membuang respons XHR yang tertunda kecuali yang terbaru. Kode berikut menunjukkan memulai serta membatalkan permintaan Ajax:
Saya memiliki masalah pemungutan suara dan setelah halaman ditutup, pemungutan suara berlanjut sehingga karena saya pengguna akan melewatkan pembaruan karena nilai mysql sedang ditetapkan untuk 50 detik berikutnya setelah penutupan halaman, meskipun saya membunuh permintaan ajax, saya mencari tahu, menggunakan $ _SESSION untuk menetapkan var tidak akan memperbarui dalam polling sendiri sampai berakhir dan yang baru telah dimulai, jadi apa yang saya lakukan adalah menetapkan nilai dalam database saya sebagai 0 = offpage, sementara saya polling, saya query baris itu dan mengembalikan false; saat ini 0 karena kueri dalam polling akan memberi Anda nilai saat ini jelas ... Saya harap ini membantu Jika Kemudian Anda dapat mengatur
Saya telah membagikan demo yang menunjukkan cara membatalkan permintaan AJAX - jika data tidak dikembalikan dari server dalam waktu tunggu yang telah ditentukan. HTML:
KODE JS:
|