So supposedly starting at Firefox > 4, wiążąc obiekt okna jQuery z beforeunload
nie działa.Wyślij AJAX do serwera beforeunload
Chciałbym wysłać zgłoszenie AJAX, aby usunąć dane memcache mojego serwera.
Kiedy odświeżam jedyną otwartą zakładkę, widzę, że zdarzenie beforeunload
jest wywoływane zarówno w firefox, jak i chrome z następującym kodem, o czym świadczy komunikat console.log "firefox/NON-firefox delete". Problem polega na tym, że nigdy nie widzę komunikatu console.log "memcache delete" wskazującego, że mój serwer nigdy nie widział żądania $.ajax
.
Zdaję sobie sprawę, że przeglądanie wąchania przeglądarki jest złe i nie ma różnicy między zawartością instrukcji if i else. Po prostu pokazuję kod tego, co próbowałem bezskutecznie w Firefoksie.
Ktoś ma jakieś pomysły?
$(window).bind('beforeunload', function(){
if(/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 4) {
console.log('firefox delete');
memcacheDelete();
return null;
}
else {
console.log('NON-firefox delete');
memcacheDelete();
return null;
}
});
function memcacheDelete() {
$.ajax({
url: "/memcache/delete",
type: "post",
data:{},
success:function(){
console.log('memcache deleted');
}//success
}); //ajax
}
tak ... droga rozumiem asynchroniczny nazywa to, co myślę ... + 1 – cliffbarnes
@Jashwant, dzięki za explanation.Though Mam dowody na to, że usuwanie memcache powiodło się podczas używania Chrome po zamknięciu/ponownym otwarciu przeglądarki, ale nadal ** nie ** kasuje z firefox. Wydaje się, że coś tu się dzieje. Konwertowanie '$ .ajax' na synchroniczne,' async: false', help? –
Wygląda na to, że zmiana [opcji '$ .ajax' opcji' async' na 'false'] (http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings) koryguje problem. Czy istnieje jakiś powód, dla którego ktoś by tego nie chciał? –