当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《jQueryAjax调用-在成功时设置变量值》经验,为你挑选了2个好方法。

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

我觉得我可能试图以不恰当的方式使用Success回调.如何在Success回调上设置javascript变量,以便我可以决定是否应该提示用户未保存的更改消息?

正如刚刚指出的那样,我正在进行异步调用,这意味着在我的方法返回之前调用其余的代码.有没有办法使用该ajax调用,但仍然捕获window.onunload事件?(不进行同步ajax)



1> Pawel Krakow..:

由于在卸载事件中需要此行为,因此您必须进行同步调用.但是,它可能会冻结浏览器窗口/选项卡,具体取决于调用所需的时间,但是因为您有效地试图阻止用户关闭窗口...

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



2> 小智..:

jquery页面的一个例子:

var html = $.ajax({
  url: "some.php",
  async: false
 }).responseText;

资料来源:http://api.jquery.com/jQuery.ajax/

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有