从Jquery XML响应创建关键的键控数组

时间:2014-05-24 14:35:21

标签: javascript jquery

我正在使用Jquery ajax,我得到了类似

的XML
<tabs>
<tab>
<id>1</id>
<name>firstname</name>
<lastname>surname1</lastname>
</tab>

<tab>
<id>2</id>
<name>secondname</name>
<lastname>surname2</lastname>
</tab>
</tabs>

在jquery中我想将它存储在下面的对象中

var obj = {
    '1' : {
        'name' : 'firstname',
        'lastname' : 'surname1'
    },
    '2' : {
        'name' : 'secondname',
        'lastname' : 'surname2'
    }
};

以便根据键i可以直接访问其值。

  obj.2.name should return me second name

任何jQuery专家都可以帮助我。

下面是我的Jquery代码,我正在尝试更新,但没有得到任何线索如何使其工作。

提前谢谢。

$.ajax({
            url: __BASEURL + "portal/getusertabs.php",
            data: {user_id: user_id},
            type: "POST",
            dataType: 'XML',
            cache: false,
            async: false,
            success: function(data, textStatus, jqXHR) {
                $(data).find('tabs').each(function() {
                    $(this).find('tab').each(function() { 
                        var tab_id = $(this).find('id').text();
                        var tab_name = $(this).find('name').text();
                        var tab_lastname = $(this).find('last name').text();
                        tab.push({id : tab_id, name : tab_name, lastname : tab_lastname});
                    });
                });
            }
        });

1 个答案:

答案 0 :(得分:1)

请注意,您不需要遍历tabs,因为这是根元素,并且只应该有1个。您还需要将选项卡的id设置为对象的键。试试这个:

$(data).find('tab').each(function () {
    var tab_id = $(this).find('id').text();
    var tab_name = $(this).find('name').text();
    var tab_lastname = $(this).find('lastname').text();
    tab[tab_id] = {
        name: tab_name,
        lastname: tab_lastname
    };
});

console.log(tab);

Example fiddle

请注意,使用tab.2.name无效javascript,因为数值不能用作标识符。相反,你需要使用它:

tab['2'].name // = 'secondname'