So supposedly starting at Firefox > 4, Bindung des Fensters jQuery-Objekt an beforeunload
funktioniert nicht mehr.Senden Sie AJAX an Server vorunload
Was würde ich tun wollen, ist ein AJAX Beitrag, um die Memcache-Daten meines Servers zu löschen.
Wenn ich die einzige offene Registerkarte aktualisieren, kann ich sehen, dass das Ereignis beforeunload
in Firefox und Chrome mit dem folgenden Code aufgerufen wird, wie durch die console.log Nachricht "firefox/NON-firefox delete" belegt. Das Problem ist, dass ich nie die console.log Nachricht "Memcache löschen" sehe, die anzeigt, dass mein Server die $.ajax
Anfrage nie gesehen hat.
Ich weiß, es ist schlecht, Browser Sniffing zu tun, und es gibt keinen Unterschied zwischen dem, was in den if und else-Anweisungen enthalten ist. Ich zeige nur Code für das, was ich erfolglos in Firefox versucht habe.
Wer hat irgendwelche Ideen?
$(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
}
ja ... die Art, wie ich verstehen asynch dies nennt, ist, was ich dachte ... + 1 – cliffbarnes
@Jashwant, danke für die explanation.Though Ich habe Beweise, dass das Löschen von Memcache erfolgreich war, wenn Chrome nach dem Schließen/erneuten Öffnen des Browsers verwendet wurde, aber es löscht ** immer noch ** nicht mit Firefox. Es scheint etwas anderes hier zu geschehen .. würde die '$ .ajax' in synchrone,' async: false' umwandeln, Hilfe? –
Es sieht so aus, als ob [die '$ .ajax' Option' async' in 'false' geändert wird] (http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings), um das Problem zu beheben. Gibt es einen Grund, warum man das nicht möchte? –