我正在编写一个应用程序,用于修改服务器中缓存对象上的数据.修改是通过一个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)

推荐答案

由于您在Unload事件中需要此行为,因此您必须改为进行同步调用.但是,它可能会冻结浏览器窗口/选项卡,这取决于调用将花费多长时间,但因为您实际上是在试图阻止用户关闭窗口……

向JSON中添加async: false以进行同步调用.

Asp.net相关问答推荐

从 Request.Url.AbsolutePath 获取应用相对 url

ASP.NET web api 无法获取 application/x-www-form-urlencoded HTTP POST

IIS Request.UserHostAddress 返回 IPV6 (::1),即使禁用了 IPV6

ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

使用 jQuery.ajax() 时如何处理错误?

ASP.NET Web 应用程序消息框

我需要更改什么以允许我的 IIS7 ASP.Net 3.5 应用程序创建事件源并将事件记录到 Windows EventLog?

显示单选按钮列表内联

Asp.net 中的下拉列表验证使用必填字段验证器

如何获取 ActionLink 的工具提示?

SimpleMembership 与 ASP.NET MVC 4 中的自定义数据库架构

如何针对异常需求自定义 ASP.NET Web API AuthorizeAttribute

如何在 ASP.Net 的客户端 (JavaScript) 上判断 Page.Validate()?

为 ASP.NET Core MVC 显示 404 Not Found 页面

您正在使用哪些身份验证和授权方案 - 为什么?

如何在 GridView 中隐藏 TemplateField 列

会话存储在客户端还是服务器端

DropDownList 的 SelectedValue 与 SelectedItem.Value

您的下一个 ASP.NET 项目的 Select 是什么:Web 窗体还是 MVC?

jQuery Ajax 调用 - 成功设置变量值