Seperti banyak lainnya, situs web saya menggunakan jQuery. Ketika saya membuka alat pengembang, saya melihat peringatan yang mengatakan bahwa XMLHTTPRequest adalah
tidak digunakan lagi karena efeknya yang merugikan bagi pengalaman pengguna akhir.
Saya melanjutkan dan membaca sebagian dari dokumentasinya , tetapi cukup teknis. Bisakah seseorang menjelaskan konsekuensi pengalihan dari XMLHTTPRequest ke WHATWG secara sederhana? Dikatakan itu terjadi pada 2012.
Selain itu, dokumentasi mengatakan bahwa Synchronous XMLHttpRequest di luar pekerja sedang dalam proses dihapus dari platform web, ketika itu terjadi, jika agen pengguna memilikinya dalam layanan, apakah mereka perlu mengubah kode yang ada?
Jawaban:
Untuk menghindari peringatan ini, jangan gunakan:
dalam setiap
$.ajax()
panggilan Anda . Ini adalah satu-satunya fiturXMLHttpRequest
yang tidak digunakan lagi.Standarnya adalah
async: true
, jadi jika Anda tidak pernah menggunakan opsi ini sama sekali, kode Anda akan aman jika fitur tersebut benar-benar dihapus.Namun, mungkin tidak akan - itu mungkin dihapus dari standar, tapi saya yakin browser akan terus mendukungnya selama bertahun-tahun. Jadi jika Anda benar-benar membutuhkan AJAX sinkron karena alasan tertentu, Anda dapat menggunakan
async: false
dan mengabaikan peringatannya. Tetapi ada alasan bagus mengapa AJAX sinkron dianggap gaya yang buruk, jadi Anda mungkin harus mencoba mencari cara untuk menghindarinya. Dan orang-orang yang menulis aplikasi Flash mungkin tidak pernah mengira itu akan hilang, tapi sekarang sedang dalam proses untuk dihapus.Perhatikan bahwa
Fetch
API yang menggantikanXMLHttpRequest
bahkan tidak menawarkan opsi sinkron.sumber
$.ajax
.jquery.i18n.properties.js
tetapi tidak ada panggilan eksplisit di sisi saya ke$.ajax.
Mungkin secara internal, tetapi tidak yakin..properties
file. Ini mungkin menggunakan AJAX sinkron untuk melakukannya, menyebabkan peringatan ini.Jawaban yang diterima benar, tetapi saya menemukan penyebab lain jika Anda mengembangkan di bawah ASP.NET dengan Visual Studio 2013 atau lebih tinggi dan yakin Anda tidak membuat permintaan ajax sinkron atau menentukan skrip di tempat yang salah.
Solusinya adalah menonaktifkan fitur "Tautan Peramban" dengan menghapus centang "Aktifkan Tautan Peramban" di tarik-turun bilah alat VS yang ditunjukkan dengan ikon penyegaran kecil yang menunjuk searah jarum jam. Segera setelah Anda melakukan ini dan memuat ulang halaman, peringatan akan berhenti!
Ini seharusnya hanya terjadi saat men-debug secara lokal, tetapi masih bagus untuk mengetahui penyebab peringatan.
sumber
web.config
dengan menambahkan<add key="vs:EnableBrowserLink" value="false" />
di dalam<appSettings>
seperti yang dijelaskan di sini: poconosystems.com/software-development/… .Ini terjadi pada saya dengan memiliki tautan ke js eksternal di luar kepala tepat sebelum akhir bagian tubuh. Anda tahu, salah satunya:
<script src="http://somesite.net/js/somefile.js">
Itu tidak ada hubungannya dengan JQuery.
Anda mungkin akan melihat hal yang sama melakukan hal seperti ini:
Tapi saya belum menguji ide itu.
sumber
Itu disebutkan sebagai komentar oleh @ henri-chan , tapi saya pikir itu perlu lebih diperhatikan:
Saat Anda memperbarui konten elemen dengan html baru menggunakan jQuery / javascript, dan html baru ini berisi
<script>
tag, tag tersebut dijalankan secara sinkron dan memicu kesalahan ini. Hal yang sama berlaku untuk stylesheet.Anda tahu ini terjadi ketika Anda melihat (beberapa) skrip atau stylesheet dimuat seperti
XHR
di jendela konsol. (firefox).sumber
Tidak ada satu pun dari jawaban sebelumnya (yang semuanya benar) yang sesuai dengan situasi saya: Saya tidak menggunakan
async
parameter injQuery.ajax()
dan saya tidak menyertakan tag skrip sebagai bagian dari konten yang dikembalikan seperti:Situasi saya adalah bahwa saya memanggil dua permintaan AJAX secara berurutan dengan tujuan untuk memperbarui dua div secara bersamaan:
Ketika saya mengklik
a.anchor3
, itu memunculkan bendera peringatan. Saya menyelesaikan masalah dengan mengganti pemanggilan f2 denganclick()
fungsi:sumber
Latihan saya: Saya menggunakan permintaan asynchronous yang membuang kode ke buffer. Saya memiliki loop yang memeriksa buffer setiap detik. Ketika dump telah sampai ke buffer, saya mengeksekusi kodenya. Saya juga menggunakan waktu tunggu. Untuk pengguna akhir, halaman tersebut berfungsi seolah-olah permintaan sinkron akan digunakan.
sumber
$.ajax({ url : "example.com", async : true /* default is true */ }).done(function(response){ // Process the dump })
Semoga saya tidak salah membaca apa pun.Jika kita memuat skrip dalam tampilan parsial maka masalah ini datang
Solusi ini berfungsi dengan baik untuk saya
sumber