【问题标题】:How can I know that no one AJAX request is being executed right now?我怎么知道现在没有一个 AJAX 请求正在执行?
【发布时间】:2021-08-17 14:12:12
【问题描述】:

我怎么知道现在没有一个 AJAX 请求正在执行或所有 AJAX 请求都已完成? 我需要写一个if 声明。我需要 js 本机或 jquery。 喜欢:

if(```no ajax pending```){
   //do some
}

谢谢!

【问题讨论】:

  • 如果您使用的是 fetchaxios 库,则返回承诺。您可以查看Promise.allSettled(array of promises)
  • @RajdeepDebnath 我不使用那个:(
  • 你需要创建和监控一种 ajax 队列......这个线程可能会帮助你stackoverflow.com/questions/4785724/…

标签: javascript jquery ajax


【解决方案1】:

您可以在 jquery 中设置跟踪 ajax 请求的事件

https://api.jquery.com/ajaxstart/

https://api.jquery.com/ajaxstop

let ajaxRunning = false ;

$( document ).ajaxStart(function() {
     ajaxRunning = true;
}).ajaxStop(function() {
     ajaxRunning = false;
});

if (!ajaxRunning) {
   // nothin doin
}

ajaxStop 在所有请求完成后触发

【讨论】:

    【解决方案2】:

    围绕fetch$.ajax 或任何您使用的将每个请求添加到集合的包装器,并检查集合的大小。

    const requests = new Set();
    const makeReq = (...args) => {
        const initialRequest = fetch(...args);
        const bodyRequest = request
            .then(res => res.text())
            .finally(() => {
                requests.delete(bodyRequest);
            });
        requests.add(bodyRequest);
        return initialRequest;
    };
    

    然后,在发出请求时,请始终使用makeReq 而不是fetch。不需要 jQuery。

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      相关资源
      最近更新 更多