2013-02-14 51 views
1

我有这样的代码同样,如何从回调中获取数据?

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的(丑陋的,我知道)摆脱回调的数据,因为任何其他的办法并没有对我的工作(我不知道为什么),任何建议?

回答

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); 
+0

将默认值设置为回调“callback = callback || null”,并在调用它之前测试回调== null,然后回调为optionnal。 – sdespont 2013-02-14 07:34:41

+0

@sdespont当然,对于真实的项目,您应该通过url,数据,类型等参数(或使用ajax请求和回调的一种设置对象)来增强此示例。 – 2013-02-14 07:44:29

+0

@ axel.michel能否为您的评论添加更多细节?因为这个供应商公司真正的Intranet项目的代码。 – Neka 2013-02-14 07:56:09

0

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

如你所知,函数有自己的局部变量的上下文。 如果你定义一个VAR一个变量,它属于功能方面 (即使你使用相同的名字......)

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

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

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

它需要定义一个基于回调的函数,如@ axel.michel所说的。 :) – cwdoh 2013-02-14 07:39:01