Könnte es sein, dass Chrome ausstehende Ajax-Anfragen abbricht, sobald der Browser auf eine andere URL umgeleitet wird?

8

Ich habe diese Funktion, um eine Liste zu entsperren, die der Benutzer gerade bearbeitet:

%Vor%

Wenn der Benutzer von der Liste weg navigiert, muss ich die Sperre aufheben:

%Vor%

Allerdings funktioniert diese Entsperrung manchmal und manchmal nicht. Ich denke, das liegt daran, dass document.location.href ausgeführt wird, bevor der Ajax-Aufruf tatsächlich an den Server gesendet wurde.

Wie kann ich das Entsperren erzwingen, bevor ich den Benutzer zur nächsten Seite navigiere?

Eigentlich muss ich nicht auf die Ajax-Antwort warten, da ich den Benutzer umleiten will, ob es erfolgreich ist oder nicht. Ich möchte nur sicherstellen, dass es auf den Server übertragen wird.

Wenn ich das document.location.href innerhalb der Ajax-Funktion platziere, wartet es auf die Antwort.

    
JochenJung 20.02.2012, 13:07
quelle

2 Antworten

7

Eine wirklich schlechte Art, es zu tun, ist hinzuzufügen: async: false , die den Browser sperren wird, bis der AJAX-Aufruf abgeschlossen ist. Natürlich, wenn es ein Problem gibt und der AJAX-Aufruf nie abgeschlossen ist ...

Es ist die schnellste und einfachste Lösung für Ihr Problem, aber wahrscheinlich nicht die beste.

Ich persönlich würde die Sperre nur für zwanzig Sekunden halten (mit einem Zeitstempel in der Datenbank) und alle zehn Sekunden einen Ajax-Aufruf senden, um die Seite (falls das sinnvoll ist) mit setInterval() wieder zu sperren. Auf diese Weise wird sich die Sperre einige Sekunden nach dem Verlassen der Seite selbst aufheben und ist unabhängig von der Situation gut (ein Stromausfall für den Client würde die Seite beispielsweise nicht für immer gesperrt lassen).

    
Grim... 20.02.2012, 13:12
quelle
4

Vielleicht fehlt mir etwas, aber warum nicht die Option success im Ajax-Aufruf verwenden? Dies wird unabhängig vom Ergebnis ausgeführt und stellt sicher, dass es den Server erreicht.

%Vor%     
kasimir 20.02.2012 15:10
quelle

Tags und Links