【问题标题】:prevent next ajax request wait for previous ajax request阻止下一个 ajax 请求等待上一个 ajax 请求
【发布时间】:2018-03-03 04:25:53
【问题描述】:

我在一页中有 2 个 ajax 请求。我想同时运行这 2 个 ajax 请求。

第一个 AJAX

$.ajax({
    url: "load1.php",
    type: 'POST',
    success: function (output) {
        console.log(output);
    }
});

第二个 AJAX

$.ajax({
    url: "load2.php",
    type: 'POST',
    success: function (output) {
        console.log(output);
    }
});

load1.php我添加sleep(10);代码,所以它会延迟10秒。

所以当我尝试休眠 first ajax 请求时,second ajax 将等待第一个 ajax 10 秒,直到它完成。 我知道这可以通过使用async:false 来完成。但我不想使用它。 是否有另一种方法可以防止它并让第二个 ajax 加载而无需等待第一个 ajax?

【问题讨论】:

  • 你需要的不是 async: true 吗?
  • 我不想使用异步选项。 @KarloX
  • 您希望两个 ajax 调用一个接一个地发生?还是不等待前一个响应?
  • 无需等待前一个。这意味着第二个ajax可以响应而无需等待第一个,如果第一个响应延迟@G_S
  • AJAX 调用默认会这样做不是吗?

标签: javascript php jquery ajax


【解决方案1】:

在这种情况下,睡眠将无法满足您的要求。睡眠会延迟所有这些执行。您可以将 setTimeout/setInterval 用于您的第一个 ajax 请求。然后您的第二个 ajax 请求将独立执行,第一个将在 10 秒后执行。

类似的东西

 setTimeout(function(){ 
    $.ajax({
    url: "load1.php",
    type: 'POST',
    success: function (output) {
     console.log(output);
    }
  });

  }, 10000);

【讨论】:

  • 如果与 mysql 的连接被拒绝或服务器已关闭。最好使用睡眠。因为条件相同。
  • 顺便说一句,我没有质疑 sleep 或 settimeout。
  • 问题是——睡眠会延迟所有现有代码的执行(检查php.net/manual/en/function.sleep.php
  • 如果连接中断了怎么办?我希望第二个可以在没有完成第一个 ajax 的情况下响应.. 情况相同。
  • 你用setTimeout测试过吗?在这种情况下,第二个将在第一个之前发送响应。因为您将第一次 ajax 调用延迟了一段时间。使用这种方法并检查您浏览器的网络选项卡,希望您能清楚。
【解决方案2】:

来自@G_S 声明。确实,ajax 默认是异步的。当我们使用async:false 时,ajax 将变得同步。我发现我的问题是,在我的 php 文件中,每个文件中都有 session_start。然后当我将sleep 代码放入其中一个文件时,它将成为会话锁定。这意味着如果有sleep 代码,ajax 将等待会话重新开始加载..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2022-01-09
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    相关资源
    最近更新 更多