1

フォーム情報が更新されている場合 (album.updated = true)、ウィンドウのアンロード時にフォームを送信する際に問題が発生します。

window.onunload = function(evnt) {
  if (album.updated) {
    var save = confirm('変更を保存しますか?');
    if (保存) {
      alert('フォームを送信しています...');
      document.edit_photos.submit();
    }
  }
}

「フォームを送信しています」と警告しますが、何も保存されません。しかし、[保存] ボタンを使用して通常の送信を行うと、情報が保存されます。ここで何が問題なのですか?

4

2 に答える 2

3

unloadイベントからサーバーと確実に対話することはできません。

AJAX リクエストを送信すると、もう少し信頼性が高くなる可能性がありますが、依存するべきではありません。

代わりに、onbeforeunloadイベントとを処理する必要がありreturn "You have unsaved changes";ます。
これにより、ユーザーがナビゲーションをキャンセルできる確認ダイアログを表示するようブラウザに指示します。(その後、彼は手動で保存できます)

于 2010-11-09T01:50:30.923 に答える
2

で何もする必要はありませんunload。かつてはさらに多くのサイトが許可されていましたが、悪意のあるサイトはユーザーを罠にかけ、混乱させるために使われていたため、これはロックダウンされました。

あなたが得ることができる唯一の相互作用はを通してonbeforeunloadです。また、ここでも確実に保存を促すことはできません...通常、フォームを直接送信してナビゲーションを回避することは許可されていません。を使用して保存リクエストの送信を試みることはできますがXMLHttpRequest、ページが移動する前にサーバーに到達するという保証はありません。

したがって、合理的にできることは、保存されていないデータについてユーザーに警告し、ナビゲーションをキャンセルしてデータ自体を保存するように促すことだけです。

window.onbeforeunload= function() {
    if (album.updated)
        return (
            'You have unsaved changes to this album. Are you sure you wish '+
            'to leave without saving?'
        );
};
于 2010-11-09T01:55:12.410 に答える