2012-07-05 70 views
2

我想通過URLLoader使用GET URLRequest來讀取服務器中的數據,它確實有效。問題是,它只能使用一次。AS3:多個「get」URLRequests不起作用

public class Settings 
{ 
    private static var request:URLRequest; 
    private static var loader:URLLoader; 

    public static function getRequest(url:String):void 
    { 
     request = new URLRequest(url); 
     request.method = URLRequestMethod.GET; 

     loader = new URLLoader(); 
     loader.addEventListener(flash.events.Event.COMPLETE, responseHolder); 
     loader.load(request); 
    } 
} 

無論何時我打開Flash應用程序,我把它放入並調用getRequest,我從URLLoader中獲取正確的數據。每當我之後調用它時,我仍然得到一個響應,並且仍然發送一個Event.COMPLETE,但收到的數據總是從第一個GET獲得的數據。只有關閉並重新打開應用程序,GET實際上才能獲得最新的數據。

我也運行了一個遠程調試會話來測試它,事實證明,只有這個函數的第一個調用甚至與它試圖讀取的服務器進行通信。

我能想到的唯一解釋是URLRequest和URLLoader在讀取數據後沒有被清除,所以當另一個GET被調用時,他們只是重用最後獲取的數據而不嘗試聯繫服務器。但我正在清除它們,因此:

//in Settings class 
    private static function responseHolder(e:flash.events.Event):void 
    { 
     request = null; 
     loader.removeEventListener(flash.events.Event.COMPLETE, responseHolder); 
     loader.close(); 
     loader = null; 
    } 

是否有我必須做的事情來重新啓用GET URLRequests?

+0

您是否嘗試過使用非靜態請求和加載器? – 2012-07-05 19:01:30

+0

是的。之前,我使用的是本地「var聲明」的請求和加載器,但認爲由於我向加載器添加了一個事件監聽器,所以在函數完成時它不會被垃圾回收。 – AndrewFerr 2012-07-05 19:06:12

+0

事件監聽器不會阻止對象被垃圾收集,反之亦然。當您將監聽器添加到加載器時,加載器將持有對添加爲偵聽器的函數的引用。請求是否按照預期的方式與非靜態對象一起工作? – 2012-07-05 19:10:01

回答

2

你應該嘗試,以防止瀏覽器緩存在URL的末尾添加一個隨機數:

request = new URLRequest(url + "?n=" + Math.random()*10000); 

我知道這是醜陋的,但它可能工作。

希望就是這樣。

+0

是的!這樣可行。非常感謝! – AndrewFerr 2012-07-06 14:54:25