我在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
如果设置为假同步请求可能会暂时锁定浏览器,在请求处于活动状态时禁用任何操作。