Xml 闪存AS3未返回功能外的阵列
我对AS3有一些问题。成功地从XML中提取数组,但在函数之外没有“保存”的数组。跟踪数组内部该函数工作正常 如果有人能伸出援手那就太好了-谢谢 圣诞快乐 AS3Xml 闪存AS3未返回功能外的阵列,xml,actionscript-3,flash,Xml,Actionscript 3,Flash,我对AS3有一些问题。成功地从XML中提取数组,但在函数之外没有“保存”的数组。跟踪数组内部该函数工作正常 如果有人能伸出援手那就太好了-谢谢 圣诞快乐 AS3 var mapLocations:Array = new Array(); var xmlLoader:URLLoader = new URLLoader(); xmlLoader.addEventListener(Event.COMPLETE, showXML); xmlLoader.load(new URLRequest("map
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!
}
var-mapplocations:Array=newarray();
var xmlLoader:URLLoader=新的URLLoader();
addEventListener(Event.COMPLETE,showXML);
load(新的URLRequest(“mapplocations.xml”);
函数showXML(e:Event){
XML.ignoreWhitespace=true;
var xml:xml=新的xml(e.target.data);
对于(i=0;i我认为您在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>
<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>
代码是异步执行的。当您在回调(时间线的作用域)之外跟踪数组时,该数组尚未使用加载的XML数据进行更新。您必须使用相互调用的方法实现控制流。时间线代码中的语句在启动后同步执行。因为您要求examp乐:
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
}
}
}
也祝你圣诞快乐:)很好的解决方案,但是XML没有问题。跟踪代码在函数中工作得很好-它可以拾取数据;我可以假设下面的答案是,这是一个时间问题,因为它不在回调中。无论如何,谢谢:)谢谢,这是有意义的!我将编写一个回调。这是有意义的,但这只是一个好建议的一半在编写变量之前(这不是一个作用域,而是一个时间问题),可以很好地理解为您正在读取该变量。但是,您不能强制异步代码是同步的。处理此问题的一种方法是分派一个“xmlReadDone”事件处理程序中的变量,听一听,然后跟踪变量的值。您希望实现的最终目标是什么。我从未指出这是一个范围问题,只是您不能简单地读取时间线范围内任何点的数据。并且不需要分派新的事件。只有一个新的方法可以解决被调用以获取传递的加载数据。它操作数据、加载新内容、设置事件侦听器或其他任何内容。关键是要理解应用程序的某些部分需要异步处理,而其他部分则不需要。你能举个例子吗?我有点不确定你的意思。
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
}
}
}