【问题标题】:Return Parsed XML Value in Actionscript在 Actionscript 中返回解析的 XML 值
【发布时间】:2011-07-18 15:19:47
【问题描述】:

我正在尝试从 Internet 检索 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”可以分配给一个变量;例如

var text:String = function onXMLLoaded .....

然后我只返回变量“文本”。但是,当我尝试这样做时,编译器会抱怨。如何将 onXMLLoaded 函数中的值返回给 getValue 函数的调用者?

谢谢!

【问题讨论】:

    标签: xml function actionscript


    【解决方案1】:

    您的var text:String = function onXMLLoaded... 想法行不通,因为该语句所做的是将onXMLLoaded 函数本身(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),您很可能会收到错误消息,因为在跟踪语句运行时调用不会完成。

    希望这有点道理。理解 AS3 的异步架构是一个困难的课题,也是极其重要的。但是,总而言之:许多人为将同步调用适配到 AS3 中进行了长期而艰苦的尝试,他们都被逼疯了。所以,不要这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2013-05-16
      • 2012-05-13
      • 1970-01-01
      相关资源
      最近更新 更多