我向应用程序中的控制器提交了 getJSON 请求,该控制器返回带有 2 个“应用程序”的有效 JSON。我知道这一点,就好像我将警报语句移动到 jQuery 的每个函数中一样,它会给我预期的结果。
我试图将此数据存储在多维数组中,以便稍后与 extJS 的菜单控件一起使用。
Code:
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"}]}
预期结果:
Test
实际结果(来自 Firebug):
applicationList[0] 未定义
如果我更换alert()
上面,使用以下代码,我得到一个带有文本“remove”的警报窗口:
for (p in applicationList) {
alert(p);
}
现在,我的想法是 JSON 请求没有及时完成alert()
所以我将使用命名回调函数来确保请求已完成:
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
...
我觉得我已经快到了,但在过去的一个小时里我已经快到了,我觉得我现在只是在污染源头,试图让它发挥作用。