开发者问题收集

Jquery abort ajax 导致错误 0

2013-10-21
408

进行简单的 jquery ajax 调用:

var ajaxOb;
var callAjax = function (){
if (ajaxOb ){
   ajaxOb .abort();
}
ajaxOb  = $.ajax({..});
}

函数调用 Ajax 被添加到输入文本字段的 onPress 事件中。 它工作正常,除了当我快速输入某些内容时出现 Ajax 错误 (0)

如何防止这种情况?

2个回答

可能是因为您同时触发了太多 XHR 请求。大多数浏览器都会将它们限制在合理的范围内。一个潜在的解决方案是 不要 在每次按键时触发事件,而是加入一个计时器,以确保事件在指定时间内最多触发一次。您可以使用我之前制作的这个小插件来实现这一点:

(function ($) {
    $.fn.delayEvent = function (event, callback, ms) {
        var timer = 0;
        $(this).on(event, function () {                   
            clearTimeout (timer);
            timer = setTimeout(callback, ms);
        });
        return $(this);
    };
})(jQuery);

用法:

$("#someTextInput").delayEvent("keyup", function () {
    console.log("I will fire a maximum of once every 500ms");
}, 500);
karim79
2013-10-21

也许它只是触发得太频繁了!

你可以尝试使用 setTimeout:

var ajaxOb;
var timeout;
var callAjax = function (){
if (ajaxOb ){
   ajaxOb .abort();
}
clearTimeout(timeout);
timeout = setTimeout(function(){
    ajaxOb  = $.ajax({..});
}, 100);

}
reyaner
2013-10-21