2013-06-29 61 views
0

我已经在谷歌搜索不同的页面,我发现了问题,但没有解决方案。把Urlloader放在一个类

我有一个类我做那类被称为WebServiceController:

public class WebServiceController 
{ 
    private var url:String; 
    private var post:Object=new Object(); 
    private var loader:URLLoader = new URLLoader(); 
    private var postVariable:String=""; 
    private var getVariable:String=""; 
    private var Geladen:Boolean=false; 

    public function WebServiceController() 
    { 

    } 

    public function postUrlData(u:String,p:Object):String 
    { 
     url=u; 
     post=p; 

     var urlReq:URLRequest = new URLRequest (url); 


     var i:int=0; 
     for(var key:String in post) 
     { 
      //trace(key +" = " + post[key]); 
      if(i==0) 
      { 
       // urlVars.key = post[key]; 
       postVariable=postVariable+""+key+"="+post[key]; 
      } 
      else 
      { 
       //urlVars.key = post[key]; 
       postVariable=postVariable+"&"+key+"="+post[key]; 
      } 
      i++; 
     } 
     //trace(postVariable); 
     var urlVars:URLVariables = new URLVariables(postVariable); 

     //trace(urlVars); 

     // Add the variables to the URLRequest 
     urlReq.data = urlVars; 
     urlReq.method = URLRequestMethod.POST; 


     // Add the URLRequest data to a new Loader 
     //loader.load(urlReq); 

     // Set a listener function to run when completed 
     loader.addEventListener(Event.COMPLETE, onLoaderComplete); 

     // Set the loader format to variables and post to the PHP 
     loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
     loader.load(urlReq); 

     function onLoaderComplete(event:Event):void 
     { 
      return loader.data; 
     } 

    } 

现在从我的影片剪辑我所说的一个功能,但它说未定义:

var wb:WebServiceController = new WebServiceController(); 
trace(wb.postUrlData(url,post)); 

我不知道如何解决此问题。我尝试了不同的东西,但它一直说未定义。

+2

另请参见URLLoader.load调用是异步的,所以当你试图追查出来的数据尚未返回。请尝试将跟踪放入onLoaderComplete方法中。要在父类中捕获它,您可能希望在加载数据时从控制器派发事件。 –

+0

你能告诉我一个关于如何在父类中派发事件的例子吗? – user2157622

回答

2

URLLoader.load调用是异步执行的,因此当您试图在实例化类的类中追踪数据时,数据未返回。

要访问父类中的数据,最好的办法可能是在数据加载并在父类中捕获它时从WebServiceController类派发事件。

WebServiceController:

public function postUrlData(u:String, p:Object):void 
    { 
     url=u; 
     post=p; 

     var urlReq:URLRequest = new URLRequest (url); 


     var i:int=0; 
     for(var key:String in post) 
     { 
     //trace(key +" = " + post[key]); 
     if(i==0) 
     { 
      // urlVars.key = post[key]; 
      postVariable=postVariable+""+key+"="+post[key]; 
     } 
     else 
     { 
      //urlVars.key = post[key]; 
      postVariable=postVariable+"&"+key+"="+post[key]; 
     } 
     i++; 
     } 
     //trace(postVariable); 
     var urlVars:URLVariables = new URLVariables(postVariable); 

     //trace(urlVars); 

     // Add the variables to the URLRequest 
     urlReq.data = urlVars; 
     urlReq.method = URLRequestMethod.POST; 


     // Add the URLRequest data to a new Loader 
     //loader.load(urlReq); 

     // Set a listener function to run when completed 
     loader.addEventListener(Event.COMPLETE, onLoaderComplete); 

     // Set the loader format to variables and post to the PHP 
     loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
     loader.load(urlReq); 
    } 

    private function onLoaderComplete(event:Event):void 
    { 
     // We can pass the event on like this 
     dispatchEvent(event); 
    } 

父类:

public function initWebServiceController():void 
{ 
    var wb:WebServiceController = new WebServiceController(); 
    wb.addEventListener(Event.COMPLETE, onWebServiceControllerDataLoaded); 
    wb.postUrlData(url, post); 
} 

private function onWebServiceControllerDataLoaded(event:Event):void 
{ 
    // The event target is the URLLoader instance. We can 
    // access the loaded data via its data property 
    trace(URLLoader(event.target).data); 
}