阵列被覆盖了

时间:2013-05-08 11:55:49

标签: javascript jquery ajax xsd

我有一个嵌套循环。在最内层的循环中,我正在创建数组,当控件从内部循环中出来时,我正在将内部循环中形成的整个数组压缩到新数组中。

问题在于最终会重写这些值。 我的数据将用于2个外循环,每个循环将分别有5个和24个内循环。

但最后我获得的总数据是最后一个循环的数据。

这是js代码:

$(document).ready(function(){
$.ajax({
    url: "Sample.xsd",
    dataType: "html",
    success: function(data){
        var xmlObj  = $.parseXML(data);

        var buff = $(xmlObj).find("xs\\:complexType");

        var xmlObj1 = [];           var buff1 = [];
        var j = 0;
        $(buff).each(function(i){

            buff1.splice(0, buff1.length);
            $this = $(this);

            $this.find("xs\\:element").each(function(index){
                buff1[index] = $(this).attr('name');
            });
            xmlObj1[j] = buff1;
            console.log(xmlObj1);
            j++;
        });


        console.log(xmlObj1);
    },
    error: function(err){

    }
});
});

如果你想我也可以附加xsd文件。但我认为它很重要。

谢谢。

3 个答案:

答案 0 :(得分:0)

在开始新循环之前,尝试将其重新分配为数组值为空。

答案 1 :(得分:0)

老实说,我认为你做得太过分了。以下内容应该为您提供预期的结果:

$(function() {
    $.ajax({
        url: "Sample.xsd",
        dataType: "html",
        success: function(data) {
            var xmlObj = $.parseXML(data), xmlObj1 = new Array(),
                buff = $(xmlObj).find("xs\\:complexType");

            $(buff).each(function(i) {
                var buff1 = new Array();
                $(this).find("xs\\:element").each(function(ii) {
                    buff1[ii] = $(this).attr('name');
                });
                xmlObj1[i] = buff1;
            });

            console.log(xmlObj1);
        },
        error: function(err) {
            console.log(err);
        }
    });
})

jsFiddle基于类似的想法。

答案 2 :(得分:0)

您可以将buff1作为$(buff).each循环的局部变量。

$(document).ready(function(){
    $.ajax({
        url: "Sample.xsd",
        dataType: "html",
        success: function(data){
            var xmlObj  = $.parseXML(data), xmlObj1 = [];
            var buff = $(xmlObj).find("xs\\:complexType");
            $(buff).each(function(i){
                var buff1 = [], $this = $(this);
                $this.find("xs\\:element").each(function(index){
                    buff1.push($(this).attr('name'));
                });
                xmlObj1.push(buff1)
            });

            console.log(xmlObj1);
        },
        error: function(err){

        }
    });
});