返回Actionscript中解析的XML值
我试图从互联网上检索一个XML文件,解析它,并从中返回一个值,所有这些都来自使用Actionscript 3.0的一个函数 这是我的密码:返回Actionscript中解析的XML值,xml,function,actionscript,Xml,Function,Actionscript,我试图从互联网上检索一个XML文件,解析它,并从中返回一个值,所有这些都来自使用Actionscript 3.0的一个函数 这是我的密码: public function getValue(aWord:String):void { var xml:XML; var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener(Event.COMPLETE,onXMLLoaded); ur
public function getValue(aWord:String):void
{
var xml:XML;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE,onXMLLoaded);
urlLoader.load(new URLRequest("SOMEXMLFILE.xml")); // I use the aWord parameter in fetching the xml file
function onXMLLoaded(e:Event):String{
xml = new XML(e.target.data);
trace(xml);
return (xml.bestmatch.dictionary.text());
}
return ""; //THIS NEEDS TO RETURN THE VALUE FOUND IN THE onXMLLoaded FUNCTION
}
理想情况下,可以将局部函数“onXMLLoaded”分配给一个变量;e、 g
var text:String = function onXMLLoaded .....
然后我只返回变量“text”。但是,当我尝试这样做时,编译器会抱怨。如何将onXMLLoaded函数中的值返回给getValue函数的调用方
谢谢 您的
var text:String=函数onxmloaded
。。。idea不起作用,因为该语句所做的是将onxmloaded
函数本身(类型为function
)分配给text
变量String
,这就是它无法编译的原因
长话短说,在Actionscript中没有简单的方法可以同步调用外部源(如XML、web服务)。这对于最初来自典型的C/Java类型开发环境的人来说是相当恼火的,包括我自己。C类型语言中常见的许多典型设计模式在Actionscript中是不可能的。您将永远无法从同一函数返回URLLoader调用的结果;这就是语言的构建方式
解决此问题的一种方法是将参数传递给函数并创建一个匿名函数,该函数在包含文本的对象上设置值,如下所示:
public function getValue(aWord:String, textToSetObject:Object):void
{
var xml:XML;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE,
function (e:Event) : void
{
textToSetObject.text = new XML(e.target.data).bestmatch.dictionary.text();
}
);
urlLoader.load(new URLRequest("SOMEXMLFILE.xml"));
}
然后可以使用getValue(“string”,someObject)调用此函数代码>并在一段时间后someObject.text
将等于XML调用的结果
关键词是它在一段时间之后。因为它是一个异步调用(即使是本地XML文件),所以您永远无法确切地知道调用何时完成。如果您尝试执行getValue(“string”,someObject);trace(someObject.text)
您很可能会遇到错误,因为当trace语句运行时调用不会完成
希望这有点道理。理解AS3的异步体系结构是一个困难的主题,也是极其重要的。但是,总的来说:许多人已经花了很长时间和精力将同步调用融入AS3,他们都被逼疯了。所以,不要这样做