Saya ingin tahu apakah mungkin untuk "menghubungkan" ke setiap permintaan AJAX (baik saat akan dikirim, atau pada acara) dan melakukan tindakan. Pada titik ini saya berasumsi bahwa ada skrip pihak ketiga lainnya di halaman. Beberapa di antaranya mungkin menggunakan jQuery, sementara yang lain tidak. Apakah ini mungkin?
javascript
ajax
xmlhttprequest
Yuliy
sumber
sumber
fetch()
API yang lebih baru sekarang di browser modern.Jawaban:
Terinspirasi oleh jawaban aviv , saya melakukan sedikit penyelidikan dan inilah yang saya temukan.
Saya tidak yakin bahwa itu semua berguna sesuai dengan komentar di skrip dan tentu saja hanya akan berfungsi untuk browser yang menggunakan objek XMLHttpRequest asli .
Saya pikir itu akan berfungsi jika perpustakaan javascript digunakan karena mereka akan menggunakan objek asli jika memungkinkan.
sumber
CATATAN: Jawaban yang diterima tidak menghasilkan respons yang sebenarnya karena dipanggil terlalu dini.
Anda dapat melakukan ini yang secara umum akan mencegat AJAX apa pun secara global dan tidak mengacaukan callback apa pun, dll. Yang mungkin telah ditetapkan oleh pustaka AJAX pihak ketiga.
Beberapa dokumen lagi tentang apa yang dapat Anda lakukan di sini dengan addEventListener API di sini:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress
(Perhatikan ini tidak berfungsi <= IE8)
sumber
this.status
kembalikan status server dalam hal ini200
jika permintaan OK, 404 jika elemen tidak ditemukan, 500, dll. Tetapi kodenya, bekerja dengan sempurna."load"
event hanya disebut pada keberhasilan. Jika Anda tidak peduli dengan hasilnya (hanya kueri yang berakhir), Anda dapat menggunakan"loadend"
acaraKarena Anda menyebutkan jquery, saya tahu penawaran jquery sebuah
.ajaxSetup()
metode yang set global yang pilihan ajax yang mencakup pemicu peristiwa sepertisuccess
,error
, danbeforeSend
- yang adalah apa yang terdengar seperti apa yang Anda cari.tentu saja Anda perlu memverifikasi ketersediaan jQuery di halaman mana pun tempat Anda mencoba menggunakan solusi ini.
sumber
Ada trik untuk melakukannya.
Sebelum semua skrip berjalan, ambil objek XHMHttpReuqest asli dan simpan di var yang berbeda. Kemudian timpa XMLHttpRequest asli dan arahkan semua panggilan ke sana melalui objek Anda sendiri.
Kode Psuedo:
sumber
Saya telah menemukan perpustakaan yang bagus di Github yang melakukan pekerjaan dengan baik, Anda harus memasukkannya sebelum file js lainnya
https://github.com/jpillora/xhook
berikut adalah contoh yang menambahkan tajuk http ke setiap respons yang masuk
sumber
Menggunakan jawaban "meouw" saya sarankan untuk menggunakan solusi berikut jika Anda ingin melihat hasil permintaan
sumber
jquery ...
sumber
Selain jawaban meouw, saya harus menyuntikkan kode ke dalam iframe yang mencegat panggilan XHR, dan menggunakan jawaban di atas. Namun, saya harus berubah
Untuk:
Dan saya harus berubah
Untuk:
Ini diperlukan untuk membuatnya berfungsi di IE9 dengan mode dokumen IE8 . Jika modifikasi ini tidak dibuat, beberapa panggilan balik yang dibuat oleh kerangka komponen (Visual WebGUI) tidak bekerja. Info lebih lanjut di tautan ini:
Tanpa modifikasi ini postback AJAX tidak berhenti.
sumber