我可能会遗漏一些简单的东西但是给出了这个JS代码:
var WS = {
whoami: function () {
var toReturn;
$.getJSON("/SecurityData/GetCurrentUser", function (data) {
toReturn = data.Email;
});
return toReturn;
}
}
当我调用它时,如果我在toReturn = data.Email
上放置一个断点,那么预期的数据就在那里,但如果WS.whoami
没有定义,那么
我认为这是因为$.getJSON
调用是异步的,但我怎样才能获得所需的效果?
答案 0 :(得分:1)
Ajax是异步的,并返回一个promise对象。相反,返回promise对象并向其添加回调。
var WS = {
whoami: function () {
return $.getJSON("/SecurityData/GetCurrentUser");
}
};
WS.whoami().done(function(data){
alert(data.Email);
});
唯一的另一个选择是将其作为同步请求,但是我不推荐它,因为它会对您的UX产生影响。您必须使用$.ajax
和async:false
答案 1 :(得分:0)
更好的解决方案是使用回调调用您的函数。这样,您的代码保持异步,并在json调用完成后继续。
var WS = {
whoami: function (callback) {
$.getJSON("/SecurityData/GetCurrentUser", callback);
}
}
WS.whoami(function(data) {
// code that uses var data
});