jQueryを使用している場合は、ajax呼び出しでasyncをfalseに設定できます。それはうまくいくかもしれませんが、ブラウザによって結果が異なる場合があります。ここにjsFiddleの例があります。 Google Chromeでhttp://jsfiddle.net/jtaylor/wRkZr/4/
// Note: I came across a couple articles saying we may should to use window.onbeforeunload instead of or in addition to jQuery's unload. Keep an eye on this.
// http://vidasp.net/jQuery-unload.html
// https://stackoverflow.com/questions/1802930/setting-onbeforeunload-on-body-element-in-chrome-and-ie-using-jquery
var doAjaxBeforeUnloadEnabled = true; // We hook into window.onbeforeunload and bind some jQuery events to confirmBeforeUnload. This variable is used to prevent us from showing both messages during a single event.
var doAjaxBeforeUnload = function (evt) {
if (!doAjaxBeforeUnloadEnabled) {
return;
}
doAjaxBeforeUnloadEnabled = false;
jQuery.ajax({
url: "/",
success: function (a) {
console.debug("Ajax call finished");
},
async: false /* Not recommended. This is the dangerous part. Your mileage may vary. */
});
}
$(document).ready(function() {
window.onbeforeunload = doAjaxBeforeUnload;
$(window).unload(doAjaxBeforeUnload);
});
私はページから移動する前に、AJAX呼び出しは常に完了します。
しかし、私はそのルートに行くことを非常に推奨しません。 ajaxの "a"は "非同期"のためであり、同期呼び出しのように強制しようとすると、問題を尋ねています。その問題は、通常、ブラウザをフリーズするように現れます。これは、ajax呼び出しに長時間かかる場合に起こる可能性があります。
実行可能な場合は、ページにajax経由で投稿する必要があるデータがある場合は、ページからナビゲートする前にユーザーに確認することを検討してください。たとえば、この質問を参照してください。jquery prompt to save data onbeforeunload
ページがなくなる前に「アンロード」イベントが生成されているとは限りません。 *通常の状況ではブラウザーで実行されますが、ブラウザーが何もできなくなった場合(突然のシステムシャットダウンなど)ではできません。 – Pointy
あなたはそのlogiによって何かに頼ることはできません... *電源コードを引く* –