从内部函数返回

时间:2011-07-21 19:34:31

标签: flash function actionscript return

我是动作3中的菜鸟,所以我有一个问题,我想要你的帮助。我在函数“Login”中有一个函数“Login”和函数“_urlSended”。所以我希望该子函数返回值作为父函数。我只想让那个脚本工作

    <![CDATA[

        function onButton1click():void {
            Label1.text = Login('irakli', 'password1');
        }

        public function Login(username:String, password:String){
            var loader:URLLoader = new URLLoader();
            var request:URLRequest = new URLRequest('http://localhost/hosting/index.php');

            request.method = URLRequestMethod.POST;
            var variables:URLVariables = new URLVariables();
            variables.username = username;
            variables.password = password;
            request.data = variables;

            //handlers
            loader.addEventListener(Event.COMPLETE, _urlSended);
            loader.load(request);

            function _urlSended(e:Event){
            var loader:URLLoader = URLLoader(e.target);
            return loader.data;                     
            }
        }


    ]]>

2 个答案:

答案 0 :(得分:2)

一些事情 - 首先,我们通常为AS中的类名保留大写变量。

您的代码的问题在于您设置了一个侦听器并在同一个块中响应该侦听器。您正在尝试将数据返回给侦听器,因为它是调用对象,但侦听器对象无法处理它。因此,制作另一个函数,并处理function login之外的数据:

private var _loader:URLLoader;
public function login(username:String, password:String){
            _loader = new URLLoader();
            var request:URLRequest = new URLRequest('http://localhost/hosting/index.php');

            request.method = URLRequestMethod.POST;
            var variables:URLVariables = new URLVariables();
            variables.username = username;
            variables.password = password;
            request.data = variables;

            //handlers
            _loader.addEventListener(Event.COMPLETE, urlSended);
            _loader.load(request);
        }

private function urlSended(e:Event):void{
    var data:String = _loader.data;  //e.data may work?

    // now do something with it---
}

答案 1 :(得分:1)

首先,您无法从事件处理程序返回内容。

其次,你不应该在一个函数中有一个函数。它可能有用,但这是一种不好的做法。

我建议您触发另一种方法并随之发送loader.data。在loader.data函数

中使用_urlSended执行此操作或执行操作