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 の専門家ではありません。オンラインで見つけた例はわかりにくいものでした。