2

バックグラウンドでデータをロードするために、タイムアウト時に実行するプロシージャがあります。

(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;
    }
}

私が抱えている問題はerror、ajax リクエストが開いている場合、ユーザーが離れたときにハンドラーがヒットすることです。.stop()でリクエストを送信することでこれを回避しようとしていますがwindow.onbeforeunload、どのオブジェクトを呼び出すべきかわかりません.stop()

4

4 に答える 4

4

jQueryはXMLHttpRequestオブジェクトのabortメソッドを公開するため、このメソッドを呼び出してリクエストをキャンセルできます。オープンリクエストを変数に保存して、を呼び出す必要がありますabort()

activeRequest = $.ajax({...

そしてそれを止めるために

activeRequest.abort()
于 2012-11-06T20:26:38.243 に答える
0

関数を持つ$.ajaxリターン。この関数は、要求が完了する前に要求を停止します。XMLHTTPRequestObject.abort

var xhr = $.ajax({ /*...*/

..
..
/* Later somewhere you want to stop*/
xhr.abort();

続きを読む: jQuery AJAXリクエストをキャンセル/中止する方法は?

于 2012-11-06T20:26:05.447 に答える
0

jQueryを使用してAjaxリクエストを中止する

これは便利なはずです..あなたはまさにそれを行うためのjQueryメソッドを持っています。

于 2012-11-06T20:28:08.057 に答える
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;
    }
}
于 2012-11-06T20:55:02.517 に答える