数组长度在javascript中返回0

时间:2015-04-10 22:13:50

标签: javascript arrays

我在这里面对javascript的奇怪行为,所以我想与你分享,也许有人可以解释一下。

我有一个看起来像这样的xml文件(它有15个元素,但是粘贴只有2个):

    <activity>
    <title>
        1. row
    </title>
    <image>
        "/images/back.jpg"
    </image>
    <image>
        "/images/back1.jpg"
    </image>
    <image>
        "/images/bg.jpg"
    </image>
    <paragraph>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
    </paragraph>
</activity>
<activity>
    <title>
        2. row
    </title>
    <image>
        "/images/back.jpg"
    </image>
    <image>
        "/images/back1.jpg"
    </image>
    <image>
        "/images/bg.jpg"
    </image>
    <paragraph>
        Fusce quam eros, imperdiet a purus id, ullamcorper iaculis est. Maecenas mi nisl, elementum sed ligula et
    </paragraph>
</activity>

并使用像这样的jquery解析它(写下所有源代码。):

`

    var activities=[];

    $.ajax({
    type: "GET",  url: "activities.xml",dataType: "xml", success: function(xml){
    $(xml).find('activity').each(function(){

        var title = $(this).find('title').text();
        var paragraph = $(this).find('paragraph').text();

        var images = [];

        $(this).find('image').each(function(){
            images.push($(this).text());
        });
        activities.push({
            "title": title,
            "paragraph": paragraph,
            "images": images
        });
        alert(activities.length); // this is where i want to alert size of array (for debugging purposes)
    });

    },
    error: function() { alert("Error."); }
    });

    alert(activities.length); // this line prints out size of same array at the end of each loop

`

所以我的输出是:1,2,3,4,..... 14,15,0! 数组的大小在循环中是如何增加的以及当循环结束时它是0?

编辑:我在jsfiddle上验证了代码,确定了。

2 个答案:

答案 0 :(得分:1)

这真的很有趣。

系统中有两个警报,一个在回调中,另一个在底部。

发生了什么,GET启动,然后调用底部的警报,当前正确的长度为0。

然后GET完成,数组被放大,并且回调中的警报被调用。

现在我认为警报需要按照调用的顺序执行,但是......显然不是。第一个警报首先被执行。

您可以根据需要进行检查,但将提醒更改为alert("Inside " + activities.length)alert("Outside " + activities.length)

答案 1 :(得分:0)

尝试在&#34;完成&#34;上阅读数组的长度。回调ajax函数:

//http://api.jquery.com/jquery.ajax/
var activities=[];

$.ajax({
type: "GET",  url: "activities.xml",dataType: "xml", success: function(xml){
$(xml).find('activity').each(function(){

    var title = $(this).find('title').text();
    var paragraph = $(this).find('paragraph').text();

    var images = [];

    $(this).find('image').each(function(){
        images.push($(this).text());
    });
    activities.push({
        "title": title,
        "paragraph": paragraph,
        "images": images
    });
    alert(activities.length); // this is where i want to alert size of array (for debugging purposes)
});

},
error: function() { alert("Error."); },
complete: function() { alert(activities.length);  }
});