访问$ .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));