Javascript 在页面卸载时停止$.ajax调用
我有一个程序在超时时运行,以便在后台加载数据:Javascript 在页面卸载时停止$.ajax调用,javascript,jquery,Javascript,Jquery,我有一个程序在超时时运行,以便在后台加载数据: (function getSubPage() { setTimeout(function() { if (cnt++ < pagelist.length) { loadSubPage(pagelist[cnt]); getSubPage(); } }, 500); })(); 我遇到的问题是,如果有任何ajax请求打开,当用户导航离开时,错误处理
(function getSubPage() {
setTimeout(function() {
if (cnt++ < pagelist.length) {
loadSubPage(pagelist[cnt]);
getSubPage();
}
}, 500);
})();
我遇到的问题是,如果有任何ajax请求打开,当用户导航离开时,
错误
处理程序被命中。我试图通过.stop()
在窗口.onbeforeunload
上调用请求来解决这个问题,但我不确定调用哪个对象.stop()
?$.ajax
返回XMLHTTPRequestObject
,该对象具有中止功能。此函数将在请求完成之前停止请求
var xhr = $.ajax({ /*...*/
..
..
/* Later somewhere you want to stop*/
xhr.abort();
阅读更多:该$.ajax
返回XMLHTTPRequestObject
,该对象具有.abort
功能。此函数将在请求完成之前停止请求
var xhr = $.ajax({ /*...*/
..
..
/* Later somewhere you want to stop*/
xhr.abort();
阅读更多信息:jQuery公开了XMLHttpRequest对象的中止方法,因此您可以调用它并取消请求。您需要将打开的请求存储到一个变量中,并调用abort()
为了阻止它
activeRequest.abort()
jQuery公开了XMLHttpRequest对象的abort方法,因此您可以调用它并取消请求。您需要将打开的请求存储到一个变量中,并调用abort()
为了阻止它
activeRequest.abort()
这应该很方便。。您有一个jQuery方法来实现这一点。
这应该很方便。。您有一个jQuery方法可以做到这一点。以下是我根据反馈使用的解决方案:
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;
}
}
以下是我根据反馈使用的解决方案:
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;
}
}
我懂了。由于我正在运行超时,我需要一个映射来跟踪这些对象。如果ajax调用在一个变量内,如何发送它?activeRequest.send()??我根据反馈添加了我的解决方案。谢谢我懂了。由于我正在运行超时,我需要一个映射来跟踪这些对象。如果ajax调用在一个变量内,如何发送它?activeRequest.send()??我根据反馈添加了我的解决方案。谢谢