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是的,谢谢,我发现了很多错误,但我已经修好了,以满足我的需要。