Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
返回Actionscript中解析的XML值_Xml_Function_Actionscript - Fatal编程技术网

返回Actionscript中解析的XML值

返回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

我试图从互联网上检索一个XML文件,解析它,并从中返回一个值,所有这些都来自使用Actionscript 3.0的一个函数

这是我的密码:

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,他们都被逼疯了。所以,不要这样做