我知道您没有特别要求 Mootools 解决方案,但我做了类似的事情,我想我会在这里分享以供其他人参考。我通过覆盖各种请求方法来实现这一点。我目前使用的是 1.5.1 版,但这个或类似的东西应该适用于其他版本。
(function() {
var requestCounter = 0,
send = Request.prototype.send,
cancel = Request.prototype.cancel,
onSuccess = Request.prototype.onSuccess,
onFailure = Request.prototype.onFailure,
timeout = Request.prototype.timeout;
var increment = function() {
++requestCounter;
};
var decrement = function() {
--requestCounter;
if (requestCounter < 0) {
requestCounter = 0;
}
};
Request.implement({
send: function() {
increment();
return send.apply(this, arguments);
},
cancel: function() {
decrement();
return cancel.apply(this, arguments);
},
onSuccess: function() {
decrement();
return onSuccess.apply(this, arguments);
},
onFailure: function() {
decrement();
return onFailure.apply(this, arguments);
},
timeout: function() {
decrement();
return timeout.apply(this, arguments);
}
});
Request.getRunningCount = function() {
return requestCounter;
};
})();
现在每次发出请求时,计数器都会增加,完成后会减少。
var request1 = new Request(...);
var request2 = new Request(...);
request1.send();
request2.send();
console.log(Request.getRunningCount()); // 2
request1.cancel();
console.log(Request.getRunningCount()); // 1
// request2 completes
console.log(Request.getRunningCount()); // 0