停止运行ajax调用

时间:2011-01-04 08:59:09

标签: php jquery ajax search

我在php中使用jquery进行动态搜索。 当我输入一封信时,ajax呼叫开始了。 我的问题是,所有的ajax调用都在工作到最后,所以每个字母都是一个完整的调用。 当用户输入完整的单词时,我有未使用的请求。 如何停止未使用的电话?

非常感谢

6 个答案:

答案 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