Javascript 在KeyUp和Paste事件上限制AJAX请求

Javascript 在KeyUp和Paste事件上限制AJAX请求,javascript,jquery,ajax,Javascript,Jquery,Ajax,因此,我在文本框上jQuery中的每个keyup和paste事件上调用AJAX请求: $("#server-label").bind("keyup paste", function() { $.ajax()... }); 问题是,如果用户快速按键,那么AJAX请求就太多了。在调用AJAX请求之前,等待用户停止键入一段时间(比如500毫秒)的最佳方式是什么。基本上,在500毫秒内没有触发键或粘贴事件之前,不要发出AJAX请求 谢谢。尝试使用setTimeout()和计时器变量跟踪它

因此,我在文本框上jQuery中的每个
keyup
paste
事件上调用AJAX请求:

 $("#server-label").bind("keyup paste", function() {
     $.ajax()...
 });
问题是,如果用户快速按键,那么AJAX请求就太多了。在调用AJAX请求之前,等待用户停止键入一段时间(比如500毫秒)的最佳方式是什么。基本上,在500毫秒内没有触发键或粘贴事件之前,不要发出AJAX请求

谢谢。

尝试使用
setTimeout()
计时器
变量跟踪它:

var t;
$("#server-label").on("keyup paste", function() {
    clearTimeout(t);
    t = setTimeout(function() {
        $.ajax({/*[...]*/});
        //...
    }, 500);
});

您也可以使用throttle或,但如果您将代码封装在函数对象或字符串中以传递给
setTimeout()
函数,我认为这是不必要的。

@Anon downvoter,如果您对我的解决方案有问题,请随意评论不起作用的内容,以便改进。这是一个良好的开端,但是这个解决方案意味着500毫秒的延迟-(您还应该比较“最后一次”触发事件的时间。@ThomasDecaux是的,这将按照OP的要求以500毫秒的空闲时间执行ajax请求。您可以根据需要调整此计时器,例如200-300毫秒。不确定我是否遵循了“最后一次”的含义激发部分-如果尚未处理,则
clearTimeout
将清除最后一个排队超时,否则不会产生任何副作用。