2

我有这个代码

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(丑陋,我知道)从回调中获取数据,因为任何其他方法都不适合我(我不知道为什么),有什么建议吗?

4

2 回答 2

3

由于您使用异步 ajax,因此在 done 真正完成之前,您不能请求响应的结果。要实现这样的目标,您可以执行以下操作:

// 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 );
于 2013-02-14T07:30:49.220 回答
0

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

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

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

在这种情况下,children变量将在回调结束时关闭。让我们删除用于访问外部“孩子”的第二个var语法。

}).done(function(data) {
    children = Array(); 
    // ...
于 2013-02-14T07:28:44.977 回答