Javascript 在KeyUp和Paste事件上限制AJAX请求
因此,我在文本框上jQuery中的每个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()和计时器变量跟踪它
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
将清除最后一个排队超时,否则不会产生任何副作用。