将Web服务的结果与Javascript中的调用函数联系起来

时间:2012-08-28 21:07:57

标签: javascript jquery json web-services

我可能会遗漏一些简单的东西但是给出了这个JS代码:

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

        return toReturn;
    }
}

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

唯一的另一个选择是将其作为同步请求,但是我不推荐它,因为它会对您的UX产生影响。您必须使用$.ajaxasync:false

答案 1 :(得分:0)

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

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

WS.whoami(function(data) {
    // code that uses var data 
});