2013-06-29 62 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); 
}