誰かが私のページをリロードしたり閉じたりしたときに、進行状況が保存されるようにする必要があります。進行状況を保存するために、POST
viaを実行しXMLHttpRequest()
て、データをサーバーに送信します。イベントsaveData()
内でこの関数をトリガーしています。window.onbeforeunload
問題は、いくつかの計算を行い、最終的に実際にデータを POST するためにsaveData()
a を呼び出すことです。sendData(content)
また、処理および送信しているデータが大きい場合 (>100kB)、すべてのデータがサーバーに到達する前にウィンドウが閉じているように見えます。(画像を送信していますが、反対側に半分しか表示されない場合があります)
http リクエストは同期xhr.open("POST", url, false)
ですが、それではうまくいかないようです。
だから私の質問は、どうすれば onbeforeunload 関数が UNTIL 終了しないようにすることができxhr.readyState == 4
ますか? そのイベントを待機させるにはどうすればよいですか?
ああ、setTimeout()
うまくいきません。「時間」になる前にウィンドウが閉じます。
これはうまくいきません:
if (!jQuery) {
setTimeout(attachCode, 100);
return;
} else {
// continue and close
}
洞察をありがとう!
PS: 数秒しかかからず、ユーザーが手動で保存する必要がないため、これは「悪い習慣」ではありません。また、彼が作業中に保存すると (ウィンドウを閉じる前など)、アプリの速度が低下するため、それはできません。
[編集] 一時的な手段として、ユーザーがページにとどまることにした場合、このトリックを使用してデータを自動保存することに頼りました。ただし、警告メッセージを使用する必要はありません。:(