访问$ .getJSON()之外的json数据

时间:2014-01-03 22:15:08

标签: jquery asp.net 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变量,但是我无法获得正确的值。它总是给我“默认”的价值。

3 个答案:

答案 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));