有简单的 jquery ajax 调用:
var ajaxOb;
var callAjax = function (){
if (ajaxOb ){
ajaxOb .abort();
}
ajaxOb = $.ajax({..});
}
函数 callAjax 被添加到输入文本字段的 onPress 事件中。它工作正常,除了当我快速输入内容时出现 Ajax 错误 (0)
如何防止这种情况?
有简单的 jquery ajax 调用:
var ajaxOb;
var callAjax = function (){
if (ajaxOb ){
ajaxOb .abort();
}
ajaxOb = $.ajax({..});
}
函数 callAjax 被添加到输入文本字段的 onPress 事件中。它工作正常,除了当我快速输入内容时出现 Ajax 错误 (0)
如何防止这种情况?
也许它只是经常被解雇!
您可以尝试使用 setTimeout:
var ajaxOb;
var timeout;
var callAjax = function (){
if (ajaxOb ){
ajaxOb .abort();
}
clearTimeout(timeout);
timeout = setTimeout(function(){
ajaxOb = $.ajax({..});
}, 100);
}
可能是因为您同时触发了太多 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);