在我的Rails應用程序中,使用jQuery滑塊。在滑塊停止事件中,有一個Ajax請求。如果用戶不斷滑動滑塊,則有太多未決的Ajax請求,並且系統會掛起。我已經使用:如何停止所有活動或掛起的Ajax請求?
1:
function slide_stop(event, ui){
$.xhrPool = [];
$.xhrPool.abortAll = function() {
$(this).each(function(idx, jqXHR) {
jqXHR.abort();
});
$.xhrPool.length = 0
};
$.ajaxSetup({
beforeSend: function(jqXHR) {
$.xhrPool.push(jqXHR);
},
complete: function(jqXHR) {
var index = $.xhrPool.indexOf(jqXHR);
if (index > -1) {
$.xhrPool.splice(index, 1);
}
}
});
$.xhrPool.abortAll();
$('span#imgLoader').html('<img src="/assets/ajax-loader.gif">');
$.ajax({
type: 'get',
dataType: 'json',
url: 'some_url',
data: { is_ajax: true }
}).done(function(response){
$('span#imgLoader').empty();
});
}
Initialize slider,
$elt.slider({
min:0,
max:100,
value:50,
slide: slide_range,
stop: slide_stop
}).each(function(){
add_range_label($range_elt);
});
所有Ajax請求得到停止/在不修改狀態。但是上次請求需要很長時間才能完成。沒有結果再次掛相同的狀態。
2:
var request = $.ajax(
{
type: 'POST',
url: 'someurl',
success: function(result){}
});
然後,
request.abort();
不工作。太多請求仍處於未決狀態。 我不知道它有什麼問題。
我試着用'jquery-throttle-debounce'。包含文件'jquery.ba-throttle-debounce.min.js' 應用jQuery.debounce停止滑塊事件。
$("#slider").on("slidestop", $.debounce(240, slide_stop));
我試着減少時間延遲。但沒有預期的結果。與上述情況相同。
您是否考慮過首先減少請求?使用超時延遲請求,直到用戶停止滑動幾毫秒(例如300ms?)。 – nnnnnn
要好得多才能發送請求,直到您檢測到它們停止滑動爲止。否則,控制檯將充滿中止警告。 –