0

我可能遗漏了一些简单的东西,但鉴于此 JS 代码:

var WS = {
    whoami: function () {
        var toReturn;
        $.getJSON("/SecurityData/GetCurrentUser", function (data) {
            toReturn = data.Email;
        });

        return toReturn;
    }
}

当我调用它时,如果我在 上放置一个断点toReturn = data.Email,则预期的数据就在那里,但如果没有WS.whoami则未定义。

我认为这是因为$.getJSON调用是异步的,但是我怎样才能获得想要的效果呢?

4

2 回答 2

1

Ajax 是异步的并返回一个promise 对象。相反,返回 Promise 对象并为其添加回调。

var WS = {
    whoami: function () {
        return $.getJSON("/SecurityData/GetCurrentUser");
    }
};

WS.whoami().done(function(data){
    alert(data.Email);
});

唯一的其他选择是将其设为同步请求,但我不推荐它,因为它会对您的用户体验产生影响。你将不得不使用$.ajaxasync:false

于 2012-08-28T21:11:06.083 回答
0

更好的解决方案是使用回调调用您的函数。这样,您的代码将保持异步,并在 json 调用完成后继续。

var WS = {
    whoami: function (callback) {
        $.getJSON("/SecurityData/GetCurrentUser", callback);
    }
}

WS.whoami(function(data) {
    // code that uses var data 
});
于 2012-08-28T21:26:32.777 回答