Search code examples
actionscript-3loaderurlloader

AS3. Return a value with Loader Complete Event


I want to make some function, with returning loading object. Something like:

   var myVar:String;
   myVar = MyFuncs.GetResponse("http://www....");

And GetResponse function must return some string value, for example json-like text. I try.. But cant understend.

  public function GetResponse(url:String):String{
     var request:URLRequest = new URLRequest(url);
     var loader:URLLoader = new URLLoader();             
     loader.load(request);  
     return loader.data
  }

But data is not loaded yet, when I return the value. I understand, I need to add listener, when loader is complete:

loader.addEventListener(Event.COMPLETE, Complete);

But cant understand, how can I return the loaded value, when the loading is complete. Because it will be a another function..

Please, help, if someone know, how :)

Sorry for my English, please.


Solution

  • You can create a custom loader, and set a callback function to it, when the loader load complete, the callback will be executed. Here is a simple example

    public class MyLoader extends Loader
    {
    
        public function MyLoader($callBack:Function = null)
        {
            super();
    
            callBack = $callBack; 
    
            this.contentLoaderInfo.addEventListener(Event.COMPLETE, Complete);
        }
    
        private var callBack:Function;
    
        private var _url:String;
    
        public function set url(value:String):void {
    
            if (_url != value) {
                _url = value;
                var request:URLRequest = new URLRequest(_url);
                this.load(request); 
            }
        }
    
        protected function Complete(event:Event):void {
            var target:Object = event.target;
    
            if (callBack) {
                callBack.apply(null, [target]);
            }
        }
    

    And you can use it like this in class A

    public function class A {
    
       public function test():void {
    
           var loader:MyLoader = new MyLoader(setData);
           loader.url = "assets/pig.jpg";//you asset url
       }
    
      private function setData(obj:Object):void {
         //the obj type is LoadInfo
      }
    
    
    }