jQuery每x秒运行一次AJAX

时间:2014-10-13 20:02:11

标签: javascript php jquery ajax

我正在尝试创建一个使用ajax从PHP脚本中获取搜索结果的文本输入。基本上,目前脚本将每个字母1逐个发送给PHP,PHP必须在每个字母上查询数据库中的结果。

相反,我希望如果你在1秒内输入“Word”,它只是搜索整个“Word”,而不是搜索“W”,“Wo”,“Wor”,“Word” ”

我尝试使用window.SetTimetout,但这只是让搜索运行迟了2秒,但字母仍然是1比1发送。

$("#search").keyup(function(e) {
    var keyword = $("#search").val();
    window.setTimeout(function() {
        $.ajax({
            url: "GetItemList.php?search="+keyword,
            success: function(result) {
                $(".left").html(result);
            }
        });
    },2000);
});

2 个答案:

答案 0 :(得分:3)

Clear Timeout

var lastTimeout = null;
$("#search").keyup(function(e) {
    var keyword = $("#search").val();
    if (lastTimeout)
        clearTimeout(lastTimeout)
    lastTimeout = window.setTimeout(function() {
        $.ajax({
            url: "GetItemList.php?search="+keyword,
            success: function(result) {
                $(".left").html(result);
            }
        });
    },2000);
    });

答案 1 :(得分:2)

在创建新超时之前,您需要检查是否已激活超时。像这样:

var myTimeout = null;

$("#search").keyup(function(e) {
    var keyword = $("#search").val();

    if(myTimeout != null) {
        myTimeout = window.setTimeout(function() {
        $.ajax({
            url: "GetItemList.php?search="+keyword,
            success: function(result) {
                $(".left").html(result);
            myTimeout = null;
            }
        });
        },2000);
    }
});

这样,如果你要连续打字10秒钟,你最终会得到4或5个请求,每2秒左右一次。