1

window.onbeforeunload 関数で AJAX を使用して、サイトのページにあるテキスト フィールドを自動保存しようとしています (保存ボタンはなく、すべてバックグラウンドで行われます)。保存機能はPHPで書かれています。私は次のことを試すことから始めました:

window.onbeforeunload = function(e){
  var noteelement = document.getElementById( 'note' );
  var mynote = noteelement.value;

  $.post('save_my_note.php', { thenote: mynote }, function(data){});
  };

調査の結果、ajax 呼び出しの非同期性により、関数がサーバーから起動される前にウィンドウが閉じられるため、php コードが呼び出されないことがわかりました。

もちろん、他の人が言ったように、onbeforeunload 関数に戻り値を追加してダイアログ ボックスをポップアップさせると (それは「本当に終了しますか?」というボックスになります)、.post 呼び出し以降は機能します。ダイアログボックスが応答を待っている間、実行する時間があります。

  $.post('save_my_note.php', { thenote: mynote }, function(data){});
  return mynote;
  };

関数が関数の完了を待機するように、この post 呼び出しを非同期 AJAX に変更する必要があると言われていますが、構文に精通していないため、必要な構文がよくわかりません。post 関数の代わりに次のことを試しました。

        $.ajax({
            url: "save_my_note.php",
            data: "{thenote: mynote}",
            async: false                 
        });

しかし、それもうまくいかないようです。

onbeforeunload (または onunload??) 関数を介して自動保存を同期的に実装するための簡単なコード例はありますか? 私は JavaScript や jquery の専門家ではありません。オンラインで見つけた例はわかりにくいものでした。

4

2 に答える 2

2

jQueryのドキュメントに従って、最後の例が機能するはずです(余分なhを削除する必要があります)に変更asynch: falseする必要がありますasync: false

于 2012-01-03T21:52:25.307 に答える
0

たぶん、タイムアウトの一時停止を強制することができます-これが実際に機能するかどうかはわかりませんが、推測です:

var bSaved = false;
window.onbeforeunload = function(e){
  bSaved = false;
  var noteelement = document.getElementById( 'note' );
  var mynote = noteelement.value;

  $.post('save_my_note.php', { thenote: mynote }, function(data){ bSaved = true; });

  window.setTimeout('bSaved = true',2000);

  while (!bSaved) {}

  };
于 2012-01-03T21:48:52.873 に答える