在我的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
要好得多才能发送请求,直到您检测到它们停止滑动为止。否则,控制台将充满中止警告。 –