如何防止 AJAX 请求(在按键时调用)阻止自动建议搜索框中的进一步击键(在 PHP 中)


How to prevent an AJAX request(called on keydown) to block further keystrokes in an autosuggestion searchbox( in PHP)?

我在PHP中做了一个搜索框,当用户在搜索字符串中键入时,会出现一个自动建议div并显示搜索结果。我已经成功地实现了最终结果,但有一个问题:

由于我在每次击键时都调用 AJAX,因此我无法在运行时键入任何内容,因为每次按键首先等待 ajax 请求完成,因此阻止任何进一步的键下。所以我先输入一个字符,必须等待搜索结果,然后再键入另一个字符。没有人愿意等这么久。

我可以想到一个替代方案,其中我必须预取所有可能的搜索结果,如以下示例所示:

http://jqueryui.com/autocomplete/

但就我而言,这不是一个好的解决方案,因为我想仅在按键时从服务器加载搜索结果。(当然,即使是谷歌搜索也是这样工作的)。

有什么方法可以使击键独立于 AJAX 并且仍然让 AJAX 做自己的事情而不会阻止我的键盘输入?

如果你不希望你的用户在每次击键后被迫等待ajax调用的返回,然后才能键入另一个字母,你需要中止ajax调用onkeydown。

一种方法是检查 ajax 请求是否正在运行,如果它中止它,并使用新查询运行一个新请求。

if(xhrRunning)
    xhr.abort(); //kill the request
xhrRunning = true;
xhr = $.ajax({
    type: "POST",
    url: "suggestion.php",
    data: "q="+var,
    success: function(msg){
       xhrRunning = false;
       //Do you're treatement
    }
});

PS :确保在你的代码中async没有设置为false如果设置为假同步请求可能会暂时锁定浏览器,在请求处于活动状态时禁用任何操作。