Mam aplikację, którą piszę, która modyfikuje dane na buforowanym obiekcie na serwerze. Modyfikacje są wykonywane przez wywołanie ajax, które zasadniczo aktualizuje właściwości tego obiektu. Kiedy użytkownik skończył działać, mam podstawowy przycisk "Zapisz zmiany", który pozwala mu zapisać dane i opróżnić buforowany obiekt.jQuery Ajax call - Ustaw wartość zmiennej na sukces
Aby chronić użytkownika, chcę je ostrzec, jeśli spróbuję odejść od strony, gdy zostały wprowadzone modyfikacje obiektu serwera, jeśli nie zostały zapisane. Stworzyłem więc metodę usługi WWW o nazwie IsInitialized, która zwróci wartość true lub false w zależności od tego, czy zmiany zostały zapisane, czy też nie. Jeśli nie zostały zapisane, chcę poprosić użytkownika i dać mu szansę na anulowanie żądania nawigacji.
Oto mój problem - mimo że mam poprawnie działające połączenia, nie mogę uzyskać wywołania sukcesu ajax, aby ustawić wartość zmiennej na jego funkcji wywołania zwrotnego. Oto kod, który mam teraz.
////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.";
}
}
Czuję, że mogę próbować użyć odwołania odsyłającego Success w niewłaściwy sposób. Jak ustawić zmienną javascript w oddzwanianiu Success, aby można było zdecydować, czy użytkownik powinien zostać wyświetlony w niezapisanym komunikacie zmian?
Jak już wskazano, wykonuję wywołanie asynchroniczne, co oznacza, że reszta kodu jest wywoływana, zanim moja metoda zwróci. Czy istnieje sposób, aby użyć tego wywołania ajax, ale nadal złapać zdarzenia window.onunload? (bez tworzenia zsynchronizowanego ajaxu)
Właśnie dostałem e-mail mówiąc, że to kwestia kopalni od 5 lat przeszłości był „oznaczony jako duplikat”. Pytanie "oryginalne" ma zaledwie rok. Maszyny do pracy w go-go! :) Jest to bardziej dogłębna odpowiedź. – Nathan