Se stai usando jQuery, è possibile impostare async su false nella chiamata ajax. E potrebbe funzionare, ma i risultati potrebbero variare a seconda del browser. Ecco un esempio di jsFiddle. 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);
});
In Google Chrome, la chiamata AJAX completa sempre prima di navigare lontano dalla pagina.
Tuttavia, NON AVREBBE MOLTO RACCOMANDATO di seguire questa rotta. La "a" di ajax è per "asincrona", e se cerchi di forzarti ad agire come una chiamata sincrona, stai cercando dei problemi. Questo problema si manifesta generalmente come il congelamento del browser, cosa che potrebbe accadere se la chiamata ajax richiedesse molto tempo.
Se possibile, è consigliabile chiedere all'utente prima di allontanarsi dalla pagina se la pagina contiene dati che devono essere inviati tramite ajax. Per un esempio, vedere questa domanda: jquery prompt to save data onbeforeunload
Non è possibile fare affidamento su un evento di "scarico" generato prima che una pagina scompaia. Sarà fatto dal browser in * normali * circostanze, ma non quando il browser non può fare nulla al riguardo (arresto improvviso del sistema, ad esempio). – Pointy
Non puoi fare affidamento su nulla da quel logi ... * tira la corda dell'alimentazione * –