当前位置:  开发笔记 > 编程语言 > 正文

多维数组和jQuery的getJSON

如何解决《多维数组和jQuery的getJSON》经验,为你挑选了1个好方法。

我向我的应用程序中的控制器提交了一个getJSON请求,该控制器返回带有2个"应用程序"的有效JSON.我知道这个事实就好像我将alert语句移动到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()以下代码替换上面的代码,我会得到一个带有"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......

我觉得自己几乎就在那里,但过去一小时我几乎一直在那里,我觉得好像我现在只是在试图让它发挥作用时污染源头.



1> Paolo Bergan..:

这应该这样做:

Ext.onReady(function() {
    var applicationList = [];
    var applicationMenu;

    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'];
        });

        applicationMenu = Ext.menu.Menu({
            items: applicationList
        });
    });
});

你的想法是对的; 它不起作用的原因是因为AJAX是一个异步过程,当你触发getJSON函数时,javascript继续运行.您的解决方案不起作用,因为将其作为命名回调并不会改变这样的事实,即在您尝试初始化菜单之前不会触发它.我的所有解决方案都是将菜单启动代码移动到回调中,因为只有这样您才能访问已填写的applicationList.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有