再次,如何从回调中获取数据?

时间:2013-02-14 07:22:52

标签: javascript jquery

我有这段代码

var children;
$.ajax({
    url: Routing.generate('snmp_ajax_get_children', {dev: root}),
    async: true, type: "GET"
}).done(function(data) {
    var children = Array(); 
    for(var i in data) {
        children[i] = data[i].split('|');
        for (var j in data[i]) {
            children[i][j] = $.trim(data[i][j]);
        }
    }
    localStorage.setItem('children', children);
});
children = localStorage.getItem(children);
localStorage.removeItem('children');

我使用localStorage(丑陋,我知道)从回调中获取数据,因为任何其他方法对我都不起作用(我不知道为什么),有什么建议吗?

2 个答案:

答案 0 :(得分:3)

由于您使用异步ajax,因此在完成后才能请求响应结果。要实现这样的目标,你可以这样做:

// receiving data
function getData( callback ) {
    $.ajax({
        url: Routing.generate('snmp_ajax_get_children', {dev: root}),
        async: true, type: "GET"
    }).done(function(data) {
        // is async, so it takes some time until this is triggered...
        // I don't know your response but I think children should be 
        // an object: 
        // var children = {};
        var children = Array(); 
        for(var i in data) {
            children[i] = data[i].split('|');
            for (var j in data[i]) {
                children[i][j] = $.trim(data[i][j]);
            }
        }
        // calling your data handler with the data
        callback( children );
    });
}

// your data handler
function handleData( data ) {
    // do whatever

} 


// call the action, setting the callback
getData ( handleData );

答案 1 :(得分:0)

因为'children'变量定义了2次。

如您所知,函数有自己的局部变量上下文。 如果使用 var 定义变量,则它属于函数上下文 (即使你使用相同的名字......)

}).done(function(data) {
    var children = Array(); 
    // ...

在这种情况下,变量将在回调结束时关闭。 让我们删除第二个 var 语法来访问外部'children'。

}).done(function(data) {
    children = Array(); 
    // ...