Also angeblich ab Firefox & gt; 4 , bindet das Fenster jQuery-Objekt an beforeunload
nicht mehr.
Was möchte ich tun, ist einen AJAX-Post zu senden, um die Memcache-Daten meines Servers zu löschen.
Wenn ich die einzige offene Registerkarte aktualisiere, kann ich sehen, dass das beforeunload
-Ereignis sowohl in Firefox als auch in 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 nie die $.ajax
Anfrage gesehen hat.
Mir ist klar, dass es schlecht ist, Browser-Sniffing durchzuführen, und dass es keinen Unterschied gibt zwischen dem, was in den if-Anweisungen enthalten ist. Ich zeige nur Code für das, was ich erfolglos in Firefox versucht habe.
Hat jemand Ideen?
%Vor%Ajax ist asynchron.
Wenn Sie Ihren Browser aktualisieren (oder schließen), wird beforeunload
aufgerufen. Und sobald% code_% beendet ist, wird die Seite aktualisiert (oder geschlossen).
Wenn Sie eine Ajax-Anfrage ausführen, wartet (seit dem asynchronen) Javascript-Interpreter nicht auf die Ausführung von ajax beforeunload
event und geht nach unten, um die Ausführung von success
zu beenden.
beforeunload
von ajax soll nach ein paar Sekunden aufgerufen werden, aber Sie sehen es nicht, da die Seite aktualisiert / geschlossen wurde.
Randnotiz:
Die Methode success
ist veraltet und wird durch die Methode .success()
Nur um der Fertigstellung willen, hier ist, was ich getan habe, dank @Jashwant für die Führung:
Ich habe bemerkt, dass diese anderen SO Q & a; die gleiche Lösung vorgeschlagen haben .
Der Schlüssel ist der async:true(false)
im $.ajax
Aufruf unten:
Tags und Links javascript jquery cross-browser onbeforeunload