У меня есть приложение, которое я пишу, которое изменяет данные на кешированном объекте на сервере. Модификации выполняются с помощью вызова ajax, который в основном обновляет свойства этого объекта. Когда пользователь работает, у меня есть базовая кнопка "Сохранить изменения", которая позволяет им сохранять данные и скрывать кешированный объект.
Чтобы защитить пользователя, я хочу предупредить их, если попытаться перейти от страницы, когда были внесены изменения в объект сервера, если они не были сохранены. Таким образом, я создал метод веб-службы IsInitialized, который вернет true или false, основываясь на том, были ли сохранены изменения. Если они не были сохранены, я хочу пригласить пользователя и дать им возможность отменить свой запрос на навигацию.
Здесь моя проблема - хотя я правильно работаю, я не могу заставить вызов ajax-вызова установить значение переменной в его функции обратного вызова. Вот код, который у меня есть.
////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.";
}
}
Я чувствую, что могу попытаться использовать обратный вызов Success ненадлежащим образом. Как установить переменную javascript в обратном вызове Success, чтобы я мог решить, следует ли запрашивать пользователя с сообщением о несохраненных изменениях?
Как только что было указано, я делаю асинхронный вызов, а это означает, что остальная часть кода вызывается до того, как мой метод вернется. Есть ли способ использовать этот вызов ajax, но все же поймать событие window.onunload? (без создания синхронных аякс)