我想通過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?
您是否嘗試過使用非靜態請求和加載器? – 2012-07-05 19:01:30
是的。之前,我使用的是本地「var聲明」的請求和加載器,但認爲由於我向加載器添加了一個事件監聽器,所以在函數完成時它不會被垃圾回收。 – AndrewFerr 2012-07-05 19:06:12
事件監聽器不會阻止對象被垃圾收集,反之亦然。當您將監聽器添加到加載器時,加載器將持有對添加爲偵聽器的函數的引用。請求是否按照預期的方式與非靜態對象一起工作? – 2012-07-05 19:10:01