感谢阅读。
我注意到,如果我有一个页面打开了一个或多个ajax请求,并且我点击一个链接离开这个页面,或者刷新它,它会等待ajax请求完成才能卸载。
通常情况下这不是问题,但如果请求需要一段时间,则可能会成为问题。
我正在寻找类似于:
$(window).bind("beforeunload", function() {AjaxRequest.abort();});
想要在页面unload之前自动中止请求,但是不确定如何找到ajax请求。它们会在window下面吗?
$(onPageLoaded)
并将此放在易于访问的位置:
function onPageLoaded() {
var jqxhrs = [];
$(window).bind("beforeunload", function (event) {
$.each(jqxhrs, function (idx, jqxhr) {
if (jqxhr)
jqxhr.abort();
});
});
function registerJqxhr(event, jqxhr, settings) {
jqxhrs.push(jqxhr);
}
function unregisterJqxhr(event, jqxhr, settings) {
var idx = $.inArray(jqxhr, jqxhrs);
jqxhrs.splice(idx, 1);
}
$(document).ajaxSend(registerJqxhr);
$(document).ajaxComplete(unregisterJqxhr);
};
textStatus!='abort'
,因为你的ajax error
函数仍然会被调用以处理中止。 - dhc您需要持续所有的ajax请求,并在页面重新加载时中止所有请求。示例:
var _requests = [];
var _abortAllRequests = function () {
$(_requests).each(function (i, xhr) { xhr.abort(); });
_requests = [];
}
$(window).on("beforeunload", function () {
_abortAllRequests();
});
在你的代码中的某个地方
_requests.push($.ajax(...))
你可能需要使用window.onunload事件以及每个请求的AjaxRequestX = $.get(...),也许将对象保存在数组中,在卸载时遍历它们。
unload
方法已被删除 :/ - Badiparmagi