在我的 rails 应用程序中,使用 jquery 滑块。在滑块的停止事件中,有 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 ) );
我尝试通过减少时间延迟。但没有预期的结果。与上述情况相同。