6 Stimmen

Gibt es eine Möglichkeit, eine AJAX nach dem Schließen des Browserfensters zu senden?

Gibt es eine Möglichkeit, AJAX nach dem Schließen des Browserfensters zu senden?

Ich habe ein Browserspiel mit Bewegung in JavaScript (jQuery) und wenn ich Ajax nach jeder Bewegung senden würde, wäre es schwierig für den Server. Ich möchte also ein AJAX senden, wenn der Benutzer das Fenster (oder das Lesezeichen) schließt. Es muss in allen modernen Browsern funktionieren.

Vielen Dank für Ihre Antworten

5voto

jfriend00 Punkte 632952

Ich würde vorschlagen, dass Sie den Server mit einer Art Timer aktualisieren, damit der Server nie zu spät erfährt, in welchem Zustand sich der Client befindet (vielleicht alle 60 Sekunden, wenn der Client aktiv ist), und die Serveraktualisierung pausieren, wenn der Client nicht aktiv ist.

Fügen Sie dann in Ihre Benutzeroberfläche einige offensichtliche Elemente für Schließen oder Stopp ein, die den Benutzer dazu ermutigen, das Programm auf diese Weise zu beenden, und aktualisieren Sie dann den Server, wenn eine dieser Schaltflächen gedrückt wird.

Dann können Sie auch die unload Ereignis für die Seite und senden Sie dann einen letzten Ajax-Aufruf. Dies wird jedoch nicht in jedem Fall aufgerufen oder von allen Browsern unterstützt, so dass dies zusätzlich zu den beiden vorangegangenen Techniken durchgeführt werden müsste.

1voto

Oliver M Grech Punkte 2816

Ich glaube nicht, dass es einen praktischen Weg gibt, dies zu tun... aber es gibt definitiv eine Lösung für Ihr Problem.

Sie können Ihre Anfrage entweder in einem bestimmten Zeitintervall oder bei Erreichen eines bestimmten Stadiums des Spiels senden.

Wir sehen nicht das komplette Szenario, also bewerten Sie bitte ein wenig mehr, damit ich oder jemand anderes helfen kann.

Wenn möglich.. Ich würde eine Schaltfläche "Status speichern" oder einfach "Speichern" hinzufügen. Damit der Benutzer weiß, dass nichts gespeichert wird, wenn er nicht auf "Speichern" klickt.

1voto

Marc Uberstein Punkte 12281

Sie können versuchen window.onbeforeunload z.B.:

function saveGame(e) {
     if (!e) e = window.event;

    //Ajax here
}
window.onbeforeunload = saveGame;

0voto

Karan Shah Punkte 748

Ich kann dies vorschlagen:

  1. Rufen Sie window.onunload auf (achten Sie auf Firefox!) und speichern Sie die aktuelle Position im Server. Wichtig: Machen Sie diesen Aufruf asynchron.
  2. im Server den Zustand des Benutzers speichern (Verlassen einer Seite)
  3. einen Code in den globalen Request Event Handler schreiben und diesen Status abfragen.
  4. Sie können Threads auf dem Server starten, um das endgültige Entladen (z. B. nach 5 Sekunden) ohne neue Anfrage vom Client auszulösen.

Ich weiß, dass diese Schritte schwer umzusetzen sind, aber sie sprechen Ihr Problem an und lösen es.

0voto

nidhin Punkte 6333

Nach dem Schließen des Browserfensters kann keine Ajax-Anfrage gesendet werden. Aber Sie können onUnload-Ereignis für Ajax-Anfrage senden, wenn Benutzer klicken Sie auf die Schaltfläche Schließen des Fensters.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X