Ajax提出了太多请求

时间:2014-03-29 06:26:00

标签: javascript jquery html css ajax

所以,每当用户停止在字段getData.php中输入3秒钟时,我就会将代码发送到页面.search(我认为已完成打字)。但是我注意到如果说用户类型较慢(比如每秒1个字母),或者在大约1秒后开始输入,它会为每个输入的字母发送更多的Ajax请求(大约15/20,具体取决于多少个字母) 。而不是1个请求整个单词。

这是我的代码:

$(".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()
});

EDIT FOR BETTER UNDERSTANDING

说我打字"测试"在现场,然后我输入" test"再次1s然后进行" testtest"。当我这样做时,我得到了55个Ajax POST。我问的是,我该如何阻止这种情况发生。

1 个答案:

答案 0 :(得分:0)

添加clearTimeout(计时器);在keyup处理程序

$(".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();
});