asp.net - jQuery Ajax 调用 - 成功时设置变量值

标签 asp.net javascript jquery ajax web-services

<分区>

我正在编写一个应用程序来修改服务器中缓存对象的数据。修改是通过 ajax 调用执行的,该调用基本上更新了该对象的属性。当用户完成工作时,我有一个基本的“保存更改”按钮,允许他们保存数据并刷新缓存的对象。

为了保护用户,如果在对服务器对象进行修改且未保存的情况下尝试离开页面,我想警告他们。因此,我创建了一个名为 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 调用,但仍然捕获 window.onunload 事件? (不制作 synchronos ajax)

最佳答案

由于您在卸载事件中需要此行为,因此您必须进行同步调用。但是,它可能会卡住浏览器窗口/选项卡,具体取决于调用需要多长时间,但因为您实际上是在试图阻止用户关闭窗口...

async: false 添加到您的 JSON 中以进行同步调用。

关于asp.net - jQuery Ajax 调用 - 成功时设置变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/709876/

相关文章:

javascript - 如何在Visual Studio ASP.NET Core项目中使用semantic-ui-react?

javascript - 使用后代选择器绑定(bind)主干事件

c# - 我可以在用户控件内创建内联函数/方法吗?

c# - 在对模型类应用Crud操作时,我在ASP.Net Mvc项目中出错

javascript - 使用 Javascript 闭包将附加数据传递给 API 回调函数

javascript - 如何在另一个jquery之后插入一个div

javascript - 在 jQuery 幻灯片中恢复间隔

javascript - 带进度条的 24 小时倒计时器

asp.net - 在网站中查看页面时提示进行 Windows 身份验证

C# DateTime 在内存中有 'Z',但在 SQL Db 中没有