Jquery 访问$.getJSON()之外的json数据
我试图通过调用getAuthorName方法访问fullname变量,但无法获得正确的值。它总是给我一个值“default”。您不会从异步方法返回Jquery 访问$.getJSON()之外的json数据,jquery,asp.net,json,Jquery,Asp.net,Json,我试图通过调用getAuthorName方法访问fullname变量,但无法获得正确的值。它总是给我一个值“default”。您不会从异步方法返回,正如您所看到的,它不起作用!您需要的是回调函数,请考虑: $(document).ready(function () { var value = getParmsVals()["search"]; $.getJSON('/api/search/GetQuestionByKey/' + value, function (jsonData
,正如您所看到的,它不起作用!您需要的是回调函数,请考虑:
$(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;
}
注意我们如何传入回调
,然后在get调用结束时调用它?现在这样调用此方法:
function getAuthorName(userId, callback) {
var fullname = "default";
$.getJSON('/api/search/GetUserById/' + userId, function (jsonData) {
fullname = jsonData.firstname + " " + jsonData.lastname;
callback(fullname);
});
}
现在您可以在该回调函数中访问fullname
我喜欢@tymeJV的答案,这是一个解决问题的简单方法
我只是想指出,解决Javascript中易于访问的数据这一大问题是以数据为中心的JS框架存在的一个重要原因
您还可以将变量放在对象上并使用.bind()
,如下所示:
getAuthorName(userID, function(name) {
console.log(name);
});
您是否收到任何控制台错误?能否向我们显示您的jsonData输出。可能重复的$。getJSON
是异步的。在$之前返回fullname
。getJSON
收到响应。他不能同时设置async:false
?不管怎样,我都更喜欢你的答案。@MagicMan——将async设置为false从来都不是一个好主意,如果该服务关闭,该调用将挂起,锁定用户。用户讨厌这样@MagicMan您永远不应该将async:false设置为“始终有更好的方法”。@b1tsh1ft除非您在onbeforeunload中,或者您不想阻止的锚定标记单击,或者您不想阻止的表单提交。有很多用例使用它不是一个坏主意,但这不是其中之一。@tymeJV感谢您的回答。。所以,如果我必须多次使用$.getJSON()方法,有没有更好的方法来调用它?除了在不同的函数中调用它之外??
this.fullname = "default";
$.getJSON('/api/search/GetUserById/' + userId, function (jsonData) {
this.fullname = jsonData.firstname + " " + jsonData.lastname;
}.bind(this));