访问$ .getJSON()之外的json数据
$(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变量,但我无法获得正确的值。 它总是给我“默认”的价值。
您不会从异步方法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
!
我喜欢@tymeJV的答案,这是一个很容易解决的问题
我只是想指出,解决Javascript中易于访问的数据的大局是存在以数据为中心的JS框架存在的一个重要原因
http://knockoutjs.com/ http://backbonejs.org/ http://angularjs.org/
您也可以将变量放在对象上并使用.bind()
,如下所示:
this.fullname = "default"; $.getJSON('/api/search/GetUserById/' + userId, function (jsonData) { this.fullname = jsonData.firstname + " " + jsonData.lastname; }.bind(this));