URLLoader.load () проблема при использовании того же URLRequest - PullRequest
2 голосов
/ 08 июня 2010

У меня проблема с моими EventListeners с URLLoader, но эта проблема возникает в IE, а не в FF.

public function getUploadURL():void {   
    var request:URLRequest = new URLRequest();
    request.url = getPath();
    request.method = URLRequestMethod.GET;

    _loader = new URLLoader();
    _loader.dataFormat = URLLoaderDataFormat.TEXT;
    _loader.addEventListener(Event.COMPLETE, getBaseURL);

    _loader.load(request);
}

private function getBaseURL(event:Event):void {
    _loader.removeEventListener(Event.COMPLETE, getBaseURL);
}

Проблема в том, что мой getBaseURL запускается автоматически после того, как я выполнил код хотя бы один раз, но это имеет место только в IE. Что происходит, я вызываю свой getUploadURL, я проверяю, что сервер отправляет событие, которое приведет к событию Event.COMPLETE, поэтому getBaseURL выполняется, а слушатель удаляется. Если я вызываю метод getUploadURL и указываю неправильный путь, я получаю не Event.COMPLETE, а какое-то другое событие, и getBaseURL не должен выполняться.

Это правильное поведение в FireFox. В IE, похоже, что метод load () на самом деле не вызывает сервер, он напрямую переходит к getBaseURL () для Event.COMPLETE. Я проверил willTrigger () и hasEventListener () в _loader перед назначением нового URLLoader, и оказалось, что событие было хорошо удалено.

Надеюсь, у меня есть смысл, я упростил свой код. Подводя итог быстро: в FireFox он работает хорошо, но в IE первый вызов будет работать, но второй вызов не вызовет метод .load (); похоже, он использует ранее сохраненный результат первого вызова.

Я надеюсь, что кто-то может помочь мне, Спасибо,

Rudy

Ответы [ 2 ]

1 голос
/ 09 июня 2010

Попробуйте добавить случайную переменную в URL, чтобы предотвратить кэширование.

var url:String = getPath();
//if path already contains some variables, replace ? with &
url += "?random=" + Math.random(); 
request.url = getPath();
1 голос
/ 08 июня 2010

Возможно, запрос был кэширован.

var hdr:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
....
request.requestHeaders.push(hdr);
...