Wenn ein Benutzer einen Eintrag in unserem CMS bearbeiten möchte, sperren wir ihn, so dass niemand sonst ihn gleichzeitig bearbeiten kann. Wir geben die Sperre wieder frei, wenn der Benutzer seine Änderungen übermittelt. Wir müssen jedoch den Fall behandeln, dass der Benutzer die Seite über andere Links verlässt... mein erster Versuch ist, jQuery zu verwenden, um eine synchrone $.ajax()
anrufen $(window).unload
. Dies funktioniert zwar, aber auf der nächsten Seite, die der Benutzer sieht, scheint der Eintrag gesperrt zu sein (vorausgesetzt, er kehrt zu der Seite zurück, auf der alle Einträge aufgelistet sind, z. B. über die Schaltfläche "Zurück"). Ein einfaches Aktualisieren der Seite zeigt, dass der Eintrag wieder zur Bearbeitung bereit ist.
Meine Vermutung wäre, dass der Browser aus irgendeinem Grund die nächste Seite abruft, bevor die Ajax-Anfrage vollständig verarbeitet wurde. Die Frage ist, ob es einen Weg gibt, um sicherzustellen, dass die Dinge in der richtigen Reihenfolge geschehen.
var fire_unload_ajax = true; // certain things set this to false, not relevant
$(window).unload(function() {
if(fire_unload_ajax && $("#reset-entry-lock form").length == 1) {
$.ajax({
url: window.location.href,
async: false,
cache: false,
type: "POST",
data: $("#reset-entry-lock form").serialize()
});
}
});
1 Stimmen
In diesem Fall bleibt das Problem bestehen, wenn Sie Opera verwenden, da dieser Browser keine on(before)unload-Ereignisse erzeugt.