2013-01-17 4 views
2
private var csv:URLLoader = new URLLoader(); 
private var array:Array = new Array(); 
private var urlr:URLRequest = new URLRequest(); 
public function loadRecipe(path:String):void 
{ 
    try 
    { 
     csv.dataFormat = URLLoaderDataFormat.TEXT; 
     urlr = new URLRequest(path); 
     csv.addEventListener(Event.COMPLETE, finishRecipe);  
     csv.load(urlr); 
    } 
    catch (e:SecurityErrorEvent) 
    { 
     trace("1"); 
    } 
    catch (e:IOErrorEvent) 
    { 
     trace("2"); 
    } 
} 

public function finishRecipe(e:Event):void 
{ 
    var csvString:String = csv.data as String; 
    array = csvString.split(","); 
} 

위의 코드는 위와 같습니다. 완료 이벤트가 트리거 될 수 없습니다. 즉, 배열이 채워지지 않습니다. 아무도 내게 왜 통찰력을 줄 수 있습니까?URLLoader Event.Complete Not Triggering

편집 : 모든 약한 참조를 제거하고 오류를 확인하도록 변경되었습니다. 나는 어떤 오류도 내지 않는다.

+0

코드 나에게 좋아 보인다. IOErrorEvent.IO_ERROR 및 SecurityErrorEvent.SECURITY_ERROR 처리를 시도 했습니까? –

+0

그래, 내가 그 오류를 확인하는 코드를 편집, 나는 그들을 얻지 않는 것. 나는 또한 모든 약한 참조를 없애려고했지만 여전히 이벤트가 발생하지 않습니다. – user1964603

+0

그건 IOEvent 및 SecurityErrorEvent를 처리하는 방법이 아닙니다. COMPLETE을 사용하는 것처럼 이러한 이벤트를 처리하려면 addEventListener를 사용해야합니다. –

답변

0

당신이 실제로 제공 한 코드를보고 있으면 실제로 try/catch를 사용하여 오류를 잡으려고 시도하는 것처럼 보입니다. 오류를 찾으려면 실제 로더에서 오류를 청취해야합니다. 이와 같이 :

public function Foobar() { 
    var loader:URLLoader; 
    loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
    loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); 
    loader.addEventListener(ProgressEvent.PROGRESS, onProgress); 
    loader.addEventListener(Event.COMPLETE, onComplete); 
} 

private function onComplete(e:Event):void {} 
private function onProgress(e:ProgressEvent):void {} 
private function onSecurityError(e:SecurityErrorEvent):void {} 
private function onIOError(e:IOErrorEvent):void {} 
+0

보안 및 IO 오류에 대한 이벤트 리스너와 해당 함수에 추적을 추가하여 실행 여부를 확인했습니다. 나는 아직도 어떤 오류도 잡지 않았다. – user1964603

+0

그럼, 유일한 선택은 디버그 플레이어를 실행하고 "중간 오류"가 있는지 확인하는 것입니다. 당신이 txt 파일을로드하는 중 higly 가능성이 보인다 ... –

+0

이 질문과 비슷한 : http://stackoverflow.com/questions/3263166/handle-verifyerror-error-1014-when-loading-swfs-using-as3 –

2

저는 수년 동안 자주이 버그를 보았습니다. 특정 브라우저 (FireFox, Chrome)가 네트워크가 아닌 캐시에서 파일을 검색하면 로더는 PROGRESS 이벤트를 전달하지만 결코 완료하지는 않습니다.

브라우저 캐시를 지우고 다음에 파일이 올바르게로드되는지 확인하십시오. 그렇다면 두 가지 중 하나를 해결 방법으로 사용할 수 있습니다.

  1. 요청 URL 끝에 임의의 문자열을 추가하여 캐시를 분리하십시오.

    urlr = new URLRequest(path + "?cachebust=" + Math.floor(100000+900000*Math.random())); 
    

    이 코드는 간단하지만 명백한 단점이있어 불필요한 재로드가 발생합니다.

  2. COMPLETE 및 PROGRESS 이벤트를 수신합니다. PROGRESS 핸들러에서 bytesLoaded가 bytesTotal과 일치하는지 확인하십시오. 그렇다면 모든 핸들러를 제거하고 마치 COMPLETE 이벤트 인 것처럼 계속하십시오.

    ... somewhere in your code ... 
        loader.addEventListener(Event.COMPLETE, handleComplete); 
        loader.addEventListener(ProgressEvent.PROGRESS, handleProgress); 
    
    ... somewhere else 
    private function handleProgress(evt:ProgressEvent):void 
    { 
        checkLoadComplete(); 
    } 
    private function handleComplete(evt:Event):void 
    { 
        checkLoadComplete(); 
    } 
    private function checkLoadComplete():void 
    { 
        if(loader.bytesTotal > 0 && loader.bytesLoaded == loader.bytesTotal) { 
         loader.removeEventListener(Event.COMPLETE, handleComplete); 
         loader.removeEventListener(ProgressEvent.PROGRESS, handleProgress); 
    
         ... your code here 
        } 
    } 
    
+0

주소에 임의의 쿼리 문자열을 추가하는 경우에도 절반 정도의 시간이 걸렸습니다. 이것은 아마도 프록시를 캐싱하는 서버 및 본문 데이터 반복과 관련됩니다. 어쨌든 진행 상황 해결 방법이 완전히 작동했습니다. 감사 – Eddie