Javascript Ajax发出的请求太多
因此,我编写了我的代码,每当用户停止在Javascript Ajax发出的请求太多,javascript,jquery,html,css,ajax,Javascript,Jquery,Html,Css,Ajax,因此,我编写了我的代码,每当用户停止在字段中键入时,它都应该将数据发送到页面getData.php。搜索3秒钟(考虑到他们已经完成键入)。但我注意到,如果用户键入速度较慢(比如每秒1个字母),或者在大约1秒后开始键入,那么它会为键入的每个字母发送更多的Ajax请求(大约15/20,具体取决于字母数量)。而不是一个完整单词的请求 这是我的代码: $(".search").on('input', function() { $(".search").keyup(function() {
字段中键入时,它都应该将数据发送到页面getData.php
。搜索3秒钟(考虑到他们已经完成键入)。但我注意到,如果用户键入速度较慢(比如每秒1个字母),或者在大约1秒后开始键入,那么它会为键入的每个字母发送更多的Ajax请求(大约15/20,具体取决于字母数量)。而不是一个完整单词的请求
这是我的代码:
$(".search").on('input', function() {
$(".search").keyup(function() {
timer = setTimeout(function() {
$.ajax({
type: "POST",
url: "getData.php",
data: {search: $(".search").val()}
}).done(function(data) {
$(".searchReturn").text(data);
$(".loading").hide();
});
$(".searchReturn").fadeIn(750);
}, 3000);
$(".search").keydown(function() {
clearTimeout(timer);
});
$(".loading").fadeIn(250);
});
$(".searchReturn").hide()
});
编辑以更好地理解
假设我在字段中键入“test”,然后我在1s内再次键入“test”,然后进行“testtest”。当我这么做的时候,我得到了55篇阿贾克斯帖子。我想问的是,如何阻止这种情况发生。添加clearTimeout(计时器);内键控处理器
$(".search").on('input', function() {
$(".search").keyup(function() {
clearTimeout(timer);
timer = setTimeout(function() {
$.ajax({
type: "POST",
url: "getData.php",
data: {search: $(".search").val()}
}).done(function(data) {
$(".searchReturn").text(data);
$(".loading").hide();
});
$(".searchReturn").fadeIn(750);
}, 3000);
$(".loading").fadeIn(250);
});
$(".searchReturn").hide();
});
我自己也这么想,但我很好奇,为什么你认为有多个键控响应和一个插入的键控?尝试将console.log添加到每个处理程序中,并检查say是否逐个调用(没有重复)-调用函数的顺序可能有问题这是错误的,keyup
处理程序在input
事件处理程序中,这才是真正的问题。谢谢,你是个救命恩人!也很简单。@andeneo,也都删除input
事件处理程序。事件处理程序中有事件处理程序,包装oninput
事件处理程序会在每个输入上启动,它会不断堆积在wazzoo上。这就是应该做的事情->@adeneo是的,谢谢,我发现了很多错误,但我已经修好了,以满足我的需要。