$(document).ready(function () {
var value = getParmsVals()["search"];
$.getJSON('/api/search/GetQuestionByKey/' + value, function (jsonData) {
$(jsonData).each(function (i, item) {
var name = getAuthorName(item.userId);
});
});
});
function getAuthorName(userId) {
var fullname = "default";
$.getJSON('/api/search/GetUserById/' + userId, function (jsonData) {
fullname = jsonData.firstname + " " + jsonData.lastname;
});
return fullname;
}
我正在尝试通过调用getAuthorName方法来访问fullname变量,但是我无法获得正确的值。它总是给我“默认”的价值。
答案 0 :(得分:8)
你不会从异步方法return
,你可以看到,它不起作用!你需要的是一个回调函数,考虑:
function getAuthorName(userId, callback) {
var fullname = "default";
$.getJSON('/api/search/GetUserById/' + userId, function (jsonData) {
fullname = jsonData.firstname + " " + jsonData.lastname;
callback(fullname);
});
}
注意我们如何传入callback
然后在您的来电结束时调用它?现在像这样调用这个方法:
getAuthorName(userID, function(name) {
console.log(name);
});
现在您可以在该回调函数中访问fullname
了!
答案 1 :(得分:0)
我喜欢@tymeJV的答案,这是解决问题的简单方法
我只想指出,解决Javascript中易于访问的数据的大局是存在以数据为中心的JS框架存在的一个重要原因
http://knockoutjs.com/ http://backbonejs.org/ http://angularjs.org/
答案 2 :(得分:0)
您也可以将变量放在对象上并使用.bind()
,如下所示:
this.fullname = "default";
$.getJSON('/api/search/GetUserById/' + userId, function (jsonData) {
this.fullname = jsonData.firstname + " " + jsonData.lastname;
}.bind(this));