2011-04-30 81 views
1

我有以下代碼:這個URLRequest或Loader有什麼問題?

var myRequest:URLRequest = new URLRequest("http://localhost/example.com/scripts/get_peerID.php?peerID=" + myID.text); 
var myLoader:URLLoader = new URLLoader(); 
myLoader.dataFormat = "URLLoaderDataFormat.VARIABLES"; 
myLoader.load(myRequest); 
writeText(myLoader.data); 
var vars:URLVariables = new URLVariables(myLoader.data); 
writeText(vars.peerID); 

而且get_peerID.php?獲取顯示:

peerID=5a00d01af308bb4261198d92a89b939979e7ea260a3ead7d49a9b6bdd0492b72 

然而,writeText(vars.peerID)始終顯示null。我似乎無法弄清楚爲什麼。有任何想法嗎?

+0

檢查,如果存在'myID.text' – Ibu 2011-04-30 23:07:20

+0

是的,它有什麼值錢的東西。好主意,但。謝謝。 – Mike 2011-04-30 23:18:09

+0

您需要將偵聽程序附加到加載程序,然後檢查數據。她是異步的。 – Ethan 2011-04-30 23:31:19

回答

4

URLLoader類是異步的。引用文檔:

URLLoader對象會下載所有 從URL中的數據使它 代碼可用的應用程序之前。 它發送有關 下載進度的通知, 可以通過bytesLoaded 和bytesTotal屬性以及 通過調度的事件監控該下載。

所以,這vars.peerID將調用對URLLoader.load方法後直接工作的唯一方法是,如果你的網絡有零延遲和服務器端處理有0的執行時間。兩者都極不可能。

相反,您應該聽取complete事件。

var myRequest:URLRequest = new URLRequest("http://localhost/example.com/scripts/get_peerID.php?peerID=" + myID.text); 
var myLoader:URLLoader = new URLLoader(); 
myLoader.dataFormat = "URLLoaderDataFormat.VARIABLES"; 
myLoader.addEventListener(Event.COMPLETE,onComplete); 
myLoader.load(myRequest); 

然後在某處代碼以後,這樣的事:看

public function onComplete(event:Event):void{ 
writeText(myLoader.data); 
var vars:URLVariables = new URLVariables(myLoader.data); 
writeText(vars.peerID); 
}