2010-06-08 5 views
2

URLLoader에 내 eventListeners에 문제가 있습니다.하지만이 문제는 FF가 아닌 IE에서 발생합니다.동일한 URLRequest를 사용할 때 URLLoader.load() 문제가 발생합니다.

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() 메서드가 실제로 서버를 호출하지 않는 것처럼 보입니다. Event.COMPLETE에 대한 getBaseURL()으로 바로 이동합니다. 새로운 URLLoader를 할당하기 전에 _loader에서 willTrigger() 및 hasEventListener()를 검사하여 이벤트가 잘 제거 된 것으로 나타났습니다.

내가 이해하기를 바랍니다. 코드를 단순화했습니다. 빠르게 요약하면 FireFox에서는 잘 작동하지만 IE에서는 첫 번째 호출이 작동하지만 두 번째 호출은 실제로 .load() 메서드를 호출하지 않습니다. 그것은 첫 번째 호출에서 이전에 저장된 결과를 사용하는 것 같습니다.

나는 누군가가 나를 도와주세요 수 있기를 바랍니다, 는 아마도 요청이 캐시 된

루디

답변

1

URL에 임의의 변수를 추가하여 캐싱을 방지 해보십시오.

var url:String = getPath(); 
//if path already contains some variables, replace ? with & 
url += "?random=" + Math.random(); 
request.url = getPath(); 
+0

당신의 솔루션으로 내 문제가 해결되었습니다! 감사. 그래서 캐싱과 관련이 있습니다. 그러나 Math.random()이 동일한 결과를 주면 어떻게 될까요? 그런 다음 캐시 된 URL 요청을 사용합니다. 강제로 캐시하지 못하게 할 수있는 방법이 있습니까? URLRequestHeader를 사용하는 솔루션이 불행하게도 작동하지 않았습니다. 고마워요. – Rudy

+1

@ 동일한 세션 내에서 동일한 결과를주는'Math.random' 가능성 (캐시가 지워지기 전)이 매우 작습니다. 그러나 정말로 확신하고 싶다면, 현재 시간 (리눅스 시대 이후로 경과 된 밀리 세컨드 수)을 사용할 수 있습니다. – Amarghosh

+0

고맙습니다. getTime() 함수를 사용하겠습니다. 아주 좋은 생각입니다. 고마워요! – Rudy

1

, 감사합니다.

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

감사합니다. 불행히도 시도했지만 차이가 없습니다. – Rudy

+0

@Ruby가 수정 사항을 체크 아웃합니다. – hardik

관련 문제