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.
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).
Tags und Links javascript jquery ajax