浏览器只允许大约10个并发的ajax请求(每个浏览器略有不同)。因此,如果我排队100个ajax请求,浏览器将发送其中的10个,其他90个选择他们的鼻子,直到其他请求完成为止。
如果用户点击"取消"在我的UI中,我可以使用以下技术取消所有正在执行的请求(在this answer中建议):
var canceler = $q.defer();
angular.forEach(itemThatNeedsUpdating, function(item) {
var urlForUpdatingMyItem = getUrl(item),
myData = getData(item);
$http.post(urlForUpdatingMyItem, myData, {timeout: canceler.promise}).success(successCallback);
});
...
// later, after the user clicks "cancel"
canceler.resolve();
这一切都很好,除了它还取消了服务器已经处理的10个请求,因此浏览器无法知道它们发生了什么(如果它们成功了,等等)。如果可以仅取消服务器尚未了解的90个请求并让其他10个请求正常完成,那将是很好的。 有办法吗?
或者,如果有一种方法可以在服务器端(我在服务器端使用Django)检测到客户端取消了请求以便我可以回滚任何事务,那也可以(甚至更好)。我可以看到 Web服务器可以告诉我的客户端何时取消请求,但是看不到该信息被传递到我的Django应用程序(Web服务器不会出现)注意取消,直到Django完成构建响应并将其传递回Web服务器之后。