Senden Sie AJAX an den Server bevorunload [duplizieren]

8

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%     
tim peterson 18.02.2013, 05:06
quelle

2 Antworten

11

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()

ersetzt

Referenz

    
Jashwant 18.02.2013, 05:25
quelle
7

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:

%Vor%     
tim peterson 18.02.2013 06:14
quelle