我正在编写一个应用程序,用于修改服务器中缓存对象上的数据.修改是通过一个ajax调用执行的,该调用基本上更新了该对象的属性.当用户完成工作时,我有一个基本的"保存更改"按钮,允许他们保存数据并刷新缓存对象.
为了保护用户,我想警告他们,当服务器对象被修改时,如果他们没有保存,我会try 离开页面.因此,我创建了一个名为IsInitialized的web服务方法,它将根据是否保存了更改来返回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.";
}
}
我觉得我可能试图以不恰当的方式使用成功回调.如何在成功回调上设置javascript变量,以便决定是否应使用未保存的更改消息提示用户?
正如刚才指出的,我正在进行一个异步调用,这意味着在我的方法返回之前调用其余的代码.有没有一种方法可以使用ajax调用,但仍然可以捕获窗口.onunload事件?(不使用synchronos ajax)