我有这段代码
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(丑陋,我知道)从回调中获取数据,因为任何其他方法对我都不起作用(我不知道为什么),有什么建议吗?
答案 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();
// ...