AS3: несколько запросов на получение URL не работают

Я пытаюсь прочитать данные с сервера, используя GET URLRequest с URLLoader, и он работает. Проблема в том, что работает только один раз.

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?


person AndrewFerr    schedule 05.07.2012    source источник
comment
Пробовали нестатический запрос и загрузчик?   -  person Barış Uşaklı    schedule 05.07.2012
comment
да. Раньше я использовал локальные объявленные var запросы и загрузчики, но подумал, что, поскольку я добавил прослушиватель событий в загрузчик, он не будет собираться мусором, когда функция завершится.   -  person AndrewFerr    schedule 05.07.2012
comment
Слушатели событий не предотвращают сборку мусора для объектов, наоборот. Когда вы добавляете слушателя к загрузчику, загрузчик содержит ссылку на функцию, которую вы добавляете в качестве слушателя. Работали ли запросы с нестатическими объектами должным образом?   -  person Barış Uşaklı    schedule 05.07.2012
comment
Нет, они не работали. Я также снова попробовал нестатические объекты и получил те же результаты. И спасибо за отзыв о слушателях!   -  person AndrewFerr    schedule 05.07.2012


Ответы (1)


Вы должны попробовать добавить случайное число в конце URL-адреса, чтобы предотвратить кеширование браузера:

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

Я знаю, что это некрасиво, но может сработать.

Надеюсь, что это все.

person Tiffus    schedule 06.07.2012