Ho un'applicazione che sto scrivendo che modifica i dati su un oggetto memorizzato nella cache nel server. Le modifiche vengono eseguite tramite una chiamata ajax che sostanzialmente aggiorna le proprietà di quell'oggetto. Quando l'utente ha terminato di lavorare, ho un pulsante "Salva modifiche" di base che consente loro di salvare i dati e svuotare l'oggetto memorizzato nella cache.jQuery chiamata Ajax - Imposta il valore variabile in caso di successo
Per proteggere l'utente, desidero avvisarlo se si tenta di spostarsi dalla pagina quando le modifiche sono state apportate all'oggetto server se non sono state salvate. Quindi, ho creato un metodo di servizio Web denominato IsInitialized che restituirà true o false in base al fatto che siano state salvate o meno modifiche. Se non sono stati salvati, voglio chiedere all'utente e dare loro la possibilità di cancellare la loro richiesta di navigazione.
Ecco il mio problema: anche se le chiamate funzionano correttamente, non riesco a ottenere la chiamata di successo ajax per impostare il valore della variabile sulla sua funzione di callback. Ecco il codice che ho ora.
////Catches the users to keep them from navigation off the page w/o saved changes...
window.onbeforeunload = CheckSaveStatus;
var IsInitialized;
function CheckSaveStatus() {
var temp = $.ajax({
type: "POST",
url: "URL.asmx/CheckIfInstanceIsInitilized",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(result) {
IsInitialized = result.d;
},
error: function(xmlHttpRequest, status, err) {
alert(xmlHttpRequest.statusText + " " + xmlHttpRequest.status + " : " + xmlHttpRequest.responseText);
}
});
if (IsInitialized) {
return "You currently have unprocessed changes for this Simulation.";
}
}
Sento che potrei provare a utilizzare la richiamata Success in modo inappropriato. Come faccio a impostare una variabile javascript sul callback Success in modo che possa decidere se l'utente debba o meno essere invitato w/il messaggio di modifiche non salvate?
Come è stato appena sottolineato, sto effettuando una chiamata asincrona, il che significa che il resto del codice viene chiamato prima che il metodo restituisca. C'è un modo per usare quella chiamata ajax, ma catturare comunque l'evento window.onunload? (senza sincronizzare ajax)
Sono appena una e-mail dicendo che una mia domanda dai 5 anni passati è stato "contrassegnato come duplicato". La domanda "originale" ha solo un anno. Macchine del tempo go-go! :) È una risposta più approfondita. – Nathan