我在php中使用jquery进行动态搜索。 当我输入一封信时,ajax呼叫开始了。 我的问题是,所有的ajax调用都在工作到最后,所以每个字母都是一个完整的调用。 当用户输入完整的单词时,我有未使用的请求。 如何停止未使用的电话?
非常感谢
答案 0 :(得分:4)
使用超时将请求延迟几毫秒,并在按下新键时将其清除。
类似
var searchtimeout;
$('#search').keyup( function(){
if (searchtimeout)
{
clearTimeout(searchtimeout);
}
searchtimeout = setTimeout(function(){
// initiate the ajax call here..
}, 300);
} );
答案 1 :(得分:1)
使用按钮处理用户完成后点击的请求,或者使用debouncing之类的内容。
答案 2 :(得分:1)
这个页面有很多很好的答案,接受的答案甚至有一个简单的jQuery示例:Abort Ajax requests using jQuery
答案 3 :(得分:0)
你可以做到的一种方法是,当用户按下返回键时发送请求,或至少等待几秒钟(1-3)以查看用户是否停止输入然后发出请求,你没有必须在输入框中搜索所有更改。
答案 4 :(得分:0)
好的,这是我的解决方案:
if (searchtimeout)
{
clearTimeout(searchtimeout);
}
searchtimeout = setTimeout(function(){
if(x){
x.abort();
alert("MACH WEG!");
}
x = $.post(url + "ajax.html?nsearch=1&ckey="+SID, {queryString: ""+inputString+""}, function(data) { // Do an AJAX call
$('#suggestions').fadeIn(); // Show the suggestions box
$('#suggestions').html(data); // Fill the suggestions box
x = null;
});
}, 300);
答案 5 :(得分:0)
为什么不在jquery中使用自动完成插件..我假设你已经手动编码动态查找..自动完成处理大部分这些事情,它也可以配置为你要发布多少个字母后server..it也实现了缓存。
我已经在很多asp.net项目中使用它,它非常整洁.. docs.jquery.com/Plugins/autocomplete