0

私のWebアプリケーションでは、ユーザーがページで行うことをデータベースに送信する必要があるため、最新の変更を保存します。

ユーザーがページを閉じるときに、ここでリクエストを使用して関数を呼び出すだけです。

window.onbeforeunload = sendData;

しかし、問題が発生するのは、10秒ごとにデータを送信するときです。リクエストを非同期ではなく同期で送信します(または送信されませんonbeforeunload)。問題は、データが10秒ごとに送信されるときに、これによりユーザーインターフェイスに遅延が追加されることです。

setInterval(sendData,10000);

これは呼ばれているものです:

function sendData(){
     var xhr = new XMLHttpRequest();
     var localData = datatodatabase;
     xhr.open("POST", "handler.php", false);
     xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     xhr.send("pack="+datatodatabase);
}

これをWebWorker内に追加して、同期された要求が他のすべての処理の遅延を停止するようにすることは可能ですか?

(私が言ったように:私は同期を使用する必要がありますonbeforeunload

4

1 に答える 1

1

10秒ごとに非同期にして、onbeforeunload同期させてみませんか?このような:

setInterval(function () {
    sendData(true);
}, 10000);

window.onbeforeunload = function () {
    sendData(false);
}

function sendData(async) {
    // Make the ajax call the specific way based on whether *async* is *true* or *false*

    // Probably eventually:
    xhr.open("POST", "handler.php", async);
}
于 2012-09-26T20:27:30.603 に答える