Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 闪存AS3未返回功能外的阵列_Xml_Actionscript 3_Flash - Fatal编程技术网

Xml 闪存AS3未返回功能外的阵列

Xml 闪存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

我对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!
}
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
        }
    }
}