我在这里面对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上验证了代码,确定了。
答案 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); }
});