中止以前的ajax请求,但有延迟吗?

zujrkrfu  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(293)

在用户在搜索框中键入/追加下一个字母之后,需要中止ajax请求运行的所有以前的搜索查询。
我使用了以下代码来执行所需的结果。声明了一个对象jqxhr以中止ajax请求:

var jqxhr = {abort: function () {}}

然后在用户键入新内容时调用ajax时,初始化如下对象:

jqxhr = $.ajax({
        type: "GET",
        url: "ContentAjax.php",
        cache: false,
        dataType: 'json',
   .........OHER CODE HERE.........

现在的问题是,如果用户键入新的字母并更改最新的搜索请求,ajax请求将被中止。但是php仍然在执行,所以唤醒mysql是没有用的,严重减慢了网站的运行速度,我知道我们不能在这里用javascript终止php操作。
所以我试着像这样延迟ajax请求:

jqxhr = setTimeout(function(){ $.ajax({...code..}) }, 3000);

或者

setTimeout(function(){ jqxhr = $.ajax({...code..}) }, 3000);

但这些都不管用。它显示了一个错误,说明未定义jqxhr.abort()。或者php操作仍然没有停止。
请帮我解决这个问题,谢谢。

yqlxgs2m

yqlxgs2m1#

如果要设置ajax超时

let timeout;

$('#yourId').on('click',function(){
   if(typeof timeout != 'undefined'){ 
       clearTimeout(timeout);
   }
  timeout = setTimeout(function() {
    //your code here
  },
  200); //milliseconds
});

相关问题