我有一个在超时运行的程序,用于在后台加载数据:
(function getSubPage() {
setTimeout(function() {
if (cnt++ < pagelist.length) {
loadSubPage(pagelist[cnt]);
getSubPage();
}
}, 500);
})();
在loadSubPage()
我正在进行$.ajax()
来电:
function loadSubPage(page) {
if (typeof(initSubPages[page]) === "undefined") {
$.ajax({
type: "POST",
url: '/Main/GetPageData',
data: { page: page },
success: function (returndata) {
// ...
},
error: function() {
alert("Error retrieving page data.");
}
});
initSubPages[page] = true;
}
}
我遇到的问题是,如果任何ajax请求打开,用户导航时会遇到error
处理程序。我试图.stop()
window.onbeforeunload
上的.stop()
请求解决此问题,但我不确定要拨打{{1}}的对象是什么?
答案 0 :(得分:4)
jQuery公开XMLHttpRequest对象的中止方法,以便您可以调用它并取消请求。您需要将打开的请求存储到变量中并调用abort()
。
activeRequest = $.ajax({...
并阻止它
activeRequest.abort()
答案 1 :(得分:0)
$.ajax
返回XMLHTTPRequestObject
具有.abort
功能的var xhr = $.ajax({ /*...*/
..
..
/* Later somewhere you want to stop*/
xhr.abort();
。此函数将在请求完成之前暂停该请求。
{{1}}
答案 2 :(得分:0)
Abort Ajax requests using jQuery
这应该派上用场..你有一个jQuery方法就可以做到这一点。
答案 3 :(得分:0)
以下是我根据反馈使用的解决方案:
window.onbeforeunload = function() {
for (page in ajaxing) {
if (ajaxing[page] != null)
ajaxing[page].abort();
}
};
var ajaxing = {};
function loadSubPage(page) {
if (typeof(initSubPages[page]) === "undefined") {
var ajaxRequest = $.ajax({
type: "POST",
url: '/Main/GetPageData',
data: { page: page },
success: function (returndata) {
// ...
},
error: function() {
alert("Error retrieving page data.");
},
complete: function() {
ajaxing[lot] = null;
}
});
ajaxing[page] = ajaxRequest;
initSubPages[page] = true;
}
}