Вы, вероятно, вызываете getXMLData () до того, как ваш URLLoader завершает работу, однако, в общем случае код, который вы выполняете, имеет плохую практику.Actionscript не имеет никаких блокировок, поэтому, когда вы создаете новый URLLoader с помощью URLRequest, он немедленно начинает операцию загрузки.Например, если ваш файл кэшируется, ваш прослушиватель Event.COMPLETE может никогда не сработать, так как вы присоединяете его после начала операции загрузки.
Ниже приведен идеальный процесс создания и загрузки данных:
var data:XML;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, urlLoader_completeHandler);
urlLoader.load(new URLRequest("path"));
private function urlLoader_completeHandler(event:Event):void
{
data = new XML(urlLoader.data);
}
Если вы хотите применить это к вашему собственному классу XMLLoader, я включил "правильную" реализацию в AS3 ... однако довольно многословно.
import flash.net.URLLoader;
import flash.events.Event;
class XMLLoader extends URLLoader
{
public function XMLLoader()
{
super();
addEventListener(Event.COMPLETE, completeHandler);
}
private function completeHandler(event:Event):void
{
dispatchEvent(new XMLLoaderEvent(XMLLoaderEvent.COMPLETE, new XML(data)));
}
}
class XMLLoaderEvent extends Event
{
public static const COMPLETE:String = "xmlLoaderComplete";
public var data:XML;
public function XMLLoaderEvent(type:String, data:XML = null, bubbles:Boolean = false, cancelable:Boolean = false)
{
super(type, bubbles, cancelable);
this.data = data;
}
override public function clone():Event
{
return new XMLLoaderEvent(type, data, bubbles, cancelable);
}
}
Чтобы использоватьКласс XMLLoader:
var xmlLoader:XMLLoader = new XMLLoader();
xmlLoader.addEventListener(XMLLoaderEvent.COMPLETE, function(event:XMLLoaderEvent):void
{
trace(event.data);
});
xmlLoader.load(new URLRequest("data.xml"));
Удачи!