在页面卸载时停止$ .ajax调用

时间:2012-11-06 20:23:29

标签: javascript jquery

我有一个在超时运行的程序,用于在后台加载数据:

(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}}的对象是什么?

4 个答案:

答案 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}}

了解详情: How to cancel/abort jQuery AJAX request?

答案 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;
    }
}