我遇到了AS3的一些问题。从XML成功拉出一个数组,但在函数之外没有“已保存”的数组。跟踪数组内部,该功能正常。
如果有人能伸出援助之手,那就太棒了 - 谢谢!
圣诞快乐!
AS3
var mapLocations:Array = new Array();
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, showXML);
xmlLoader.load(new URLRequest("mapLocations.xml"));
function showXML(e:Event){
XML.ignoreWhitespace = true;
var xml:XML = new XML(e.target.data);
for (i=0; i<xml.loc.length(); i++) {
mapLocations.push([
xml[0].loc[i].locname,
xml[0].loc[i].locx,
xml[0].loc[i].locy
]);
}
trace(mapLocations); // NOT BEING RETURNED OUTSIDE FUNCTION!
}
答案 0 :(得分:1)
代码以异步方式执行。当您在回调之外跟踪数组(时间轴的范围)时,数组尚未使用加载的XML数据进行更新。您必须使用相互调用的方法来实现控制流。时间轴代码中的语句在启动后同步执行。
答案 1 :(得分:1)
因为您要求举例:
package examples
{
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class XMLLoadingExample extends Sprite
{
public function XMLLoadingExample()
{
super();
loadLocations();
}
private function loadLocations():void
{
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(
Event.COMPLETE, locationsLoadHandler);
xmlLoader.load(new URLRequest("mapLocations.xml"));
}
// This code handles the initial reception of XML
// and passes it further for more processing
private function locationsLoadHandler(event:Event):void
{
XML.ignoreWhitespace = true;
var xml:XML = XML(event.target.data);
var result:Array = [];
for each (var node:XML in xml.loc)
result.push(node.locname, node.locx, node.locy);
// Call some other code that waits for the
// results of loading this XML file
handleMapLocations(result);
}
private function handleMapLocations(locations:Array):void
{
// Do whatever you wanted with your location data here
}
}
}
答案 2 :(得分:0)
我认为你的XML存在问题。代码没问题。
试试这个XML:
<root>
<loc>
<locname>object 1</locname>
<locx>10</locx>
<locy>100</locy>
</loc>
<loc>
<locname>object 2</locname>
<locx>20</locx>
<locy>200</locy>
</loc>
<loc>
<locname>object 3</locname>
<locx>30</locx>
<locy>300</locy>
</loc>
</root>
您也可以尝试使用此XML:
<root>
<loc name="object 1" x="10" y="100" />
<loc name="object 2" x="20" y="200" />
<loc name="object 3" x="30" y="300" />
</root>
和修改后的代码:
...
mapLocations.push([
xml[0].loc[i].@name,
xml[0].loc[i].@x,
xml[0].loc[i].@y
]);
...