javascript - 中止之前的ajax请求但有延迟吗?

标签 javascript php jquery mysql ajax

用户在搜索框中键入/附加下一个字母后,需要中止 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 Action 仍然没有停止。

请帮我解决这个问题,谢谢。

最佳答案

如果你想设置ajax超时

let timeout;

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

关于javascript - 中止之前的ajax请求但有延迟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49860027/

相关文章:

javascript - 使用 import 语句,为什么会失败并显示 "Uncaught SyntaxError: Unexpected identifier""

php - 这个时间格式是什么?

php - 如何处理有错误的 Beanstalkd 作业

php - Ajax jquery 和 php 问题

javascript - 如何在 Javascript 中监听 elements 方法调用

javascript - 使用包装闭包模拟 AJAX 延迟

javascript - 选择所有 Google map 标记

javascript - 根据第二个选择填充第三个 HTML 选择

javascript - ASP.NET 中的聊天应用程序

jquery - 具有固定页眉和页脚的多列滚动