【发布时间】:2009-03-30 21:07:49
【问题描述】:
我已向我的应用程序中的控制器提交了一个 getJSON 请求,该控制器正在返回带有 2 个“应用程序”的有效 JSON。我知道这一点,就好像我将警报语句移动到 jQuery 的每个函数中一样,它会给我预期的结果。
我正在尝试将此数据存储在一个多维数组中,以便稍后与 extJS 的菜单控件一起使用。
代码:
Ext.onReady(function() {
var applicationList = [];
jQuery.getJSON('index.php/applications', function(data) {
jQuery.each(data.applications, function (i, app) {
applicationList[i] = [];
applicationList[i]['text'] = app['title'];
applicationList[i]['id'] = app['slug'];
});
});
alert(applicationList[0]['text']);
var applicationMenu = Ext.menu.Menu({
items: applicationList
});
});
JSON 响应:
{"applications":[{"slug":"test","title":"Test"},{"slug":"hardware","title":"Hardware"}]}
预期结果:
测试
实际结果(来自 Firebug):
applicationList[0] 未定义
如果我用下面的代码替换上面的alert(),我会得到一个带有“删除”文本的警报窗口:
for (p in applicationList) {
alert(p);
}
现在,我的想法是 alert() 的 JSON 请求没有及时完成,因此我将使用命名回调函数来确保请求已完成:
var data;
jQuery.getJSON('index.php/applications', get_applications(data));
function get_applications(data) {
jQuery.each(data.applications, function (i, app) {
applicationList[i] = [];
applicationList[i]['text'] = app['title'];
applicationList[i]['id'] = app['slug'];
});
};
但现在 Firebug 告诉我 data is undefined...
我觉得我快到了,但在过去的一个小时里我已经快到了,我觉得我现在只是在污染源头,试图让它发挥作用。
【问题讨论】:
标签: javascript jquery json