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:
var xhrQueue = [];
var xhrCount = 0;
$('#search_q').keyup(function(){
xhrQueue.push(xhrCount);
setTimeout(function(){
xhrCount = ++xhrCount;
if (xhrCount === xhrQueue.length) {
// Fire Your XHR //
}
}, 150);
});
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 xhrCount
dan xhrQueue
ke konsol sebelum jika blok.
$.ajaxStop
?