0

有简单的 jquery ajax 调用:

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

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

如何防止这种情况?

4

2 回答 2

3

也许它只是经常被解雇!

您可以尝试使用 setTimeout:

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

}
于 2013-10-21T14:52:49.190 回答
3

可能是因为您同时触发了太多 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);
于 2013-10-21T14:53:36.380 回答