将web服务回调的结果绑定到Javascript中的调用函数

Tying the result of web service call back to the calling function in Javascript

本文关键字:Javascript 调用 函数 结果 web 服务 回调 绑定      更新时间:2023-09-26

我可能缺少一些简单的东西,但给定了这个JS代码:

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

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

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

Ajax是异步的,并返回一个promise对象。相反,返回promise对象并向其添加回调
var WS = {
    whoami: function () {
        return $.getJSON("/SecurityData/GetCurrentUser");
    }
};
WS.whoami().done(function(data){
    alert(data.Email);
});

唯一的其他选择是将其作为同步请求,但我不建议这样做,因为它会对您的用户体验产生影响。您必须使用$.ajaxasync:false

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

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