Функция возврата изнутри - PullRequest
0 голосов
/ 21 июля 2011

Я новичок в Actionscript 3, и поэтому у меня проблема, и я хочу вашей помощи.У меня есть одна функция «Логин» и функция «_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 ]

2 голосов
/ 21 июля 2011

Несколько вещей - во-первых, мы обычно резервируем заглавные переменные для имен классов в 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 голос
/ 21 июля 2011

Во-первых, вы не можете возвращать вещи из обработчика событий.

Во-вторых, у вас не должно быть функции внутри функции.Это может сработать, но это плохая практика.

Я предлагаю вам вызвать другой метод и отправить вместе с ним loader.data.Либо так, либо делайте то, что вы делаете с loader.data внутри вашей _urlSended функции

...