我想通过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();
,发现有没有其他选择可以中止所有请求,包括图像加载。
答案 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();
}
};