在jQuery中停止其他网络请求

时间:2019-03-07 05:29:43

标签: javascript jquery

我想通过ajax发送发布请求,它必须非常快,例如不到100毫秒。此页面还包含setIntervals中的其他网络请求(甚至图像刷新)。

当下面的函数称为mainRequest()时,我想停止所有其他网络请求并仅发送此请求。因此,它是快速而高优先级的请求。

function  mainRequest()
{
  stop(); // something like this that stop all network requests immediately
  $.post( "https://example.com", $str ,function(data) {
    console.log(data);
  })
  .fail(function() {
    alert( "error" );
  });
}

我搜索了request.abort();,发现有没有其他选择可以中止所有请求,包括图像加载。

1 个答案:

答案 0 :(得分:1)

我的解决方案是针对XMLHttpRequests个请求。该代码基于此question and answers

因此,基本上,您可以使用问题中已说明的挂钩。

// Generate unique id
const generateUID = function () {
  return `id:${Math.random().toString(36).substr(2, 9)}`;
};

// Where we store all requests
let requests = {};

// Intercept all XMLHttpRequest requests
(function (send) {
  XMLHttpRequest.prototype.send = function (data) {
    this.uid = generateUID();
    requests[this.uid] = this;
    this.addEventListener('readystatechange', function () {
      if (this.readyState === 4) {
        delete requests[this.uid];
        console.log("Deleted", this.uid)
      }
    }, false);
    send.call(this, data);
  };
}(XMLHttpRequest.prototype.send));

// Call this to stop active requests
const stopActive = function () {
  for (const key in requests) {
    const request = requests[key];
    console.log(request);
    request.abort();
  }
};