$ .get调用之外的变量值未设置

时间:2017-01-03 16:12:17

标签: javascript jquery

我正在尝试从$ .get jquery调用中设置变量的值,但它无法正常工作。以下是我的代码

var uData = [];
$('#tfriends').click(function () {
    get_json(function () {                     
       alert(uData);
    });
});


function get_json(callback) {
    $.get('url', function (data) {
        var data = $.map(data.result, function (obj) {
            obj.Id = obj.Id || obj.name;
            obj.text = obj.text || obj.name;
            return obj;
        }, "json");
        uData = data;
    });
 }

2 个答案:

答案 0 :(得分:1)

您没有在$.get函数中调用回调函数。检查下面的评论。

var uData = [];
$('#tfriends').click(function () {
    get_json(function () {                     
       alert(uData);
    });
});


function get_json(callback) {
    $.get('url', function (data) {
        var data = $.map(data.result, function (obj) {
            obj.Id = obj.Id || obj.name;
            obj.text = obj.text || obj.name;
            return obj;
        }, "json");
        uData = data;
        callback() // this line will actually call your callback function
    });
 }

修改
正如@FelixKling在下面建议的那样,您可以在回调本身中传递数据,而不是如此声明全局变量

// var uData = [];
$('#tfriends').click(function () {
    get_json(function (returned_data) {                     
       alert(returned_data);
    });
});


function get_json(callback) {
    $.get('url', function (data) {
        var data = $.map(data.result, function (obj) {
            obj.Id = obj.Id || obj.name;
            obj.text = obj.text || obj.name;
            return obj;
        }, "json");
        //uData = data;
        callback(data) // this line will actually call your callback function
    });
 }

答案 1 :(得分:1)

这将使(恕我直言)更好地使用Promise,从预处理抽象检索资源,然后从后续应用程序层抽象处理

// resource retrieval
function get_json() {
    return $.get('url');
}

// pre processing
function preprocess(data) {
    // no need to use `.map` since you're modifying the data in-place
    data.result.forEach(function(obj) {
        obj.Id = obj.Id || obj.name;
        obj.text = obj.text || obj.name;
    });

    return data.result;
}

// chaining it all together
get_json().then(preprocess).then(callback);

如果预处理阶段总是需要,那么将其纳入get_json

是可以接受的
function get_json() {
    return $.get('url').then(preprocess);
}