2013-06-06 2 views
0

나는이 내 자바 스크립트에서 다음 줄 (기술적으로 타이프) 코드 :ajax 콜백을받을 때 Chrome이 다운 될 수 있습니까?

debug.print("send ajax call : "+file); 
jQuery.get('img/' + file + '.txt', this.ProcessFileData.bind(this)); // 'bind' should force the callback to remember its object - part of ECMAScript 5 
debug.print("ajax call sent : " + file); 

(디버그 기능은, 그냥 창에서 텍스트 상자에 쓰는 내 자신이지만 있는지 나를 수 크롬 ISN) 그러나 ProcessFileData() 시작 부분의 디버그 라인은 IE, Firefox 및 Safari에서 정상적으로 작동하지만 Chrome (버전 27.0.1453.110)에 도달하지 않습니다. Chrome에서 오류 창이 발생하지 않지만 탭이 응답하지 않습니다. 개발자 도구를 가져 오거나 페이지의 텍스트를 선택할 수 없습니다 (다른 탭으로 전환 할 수는 있지만). 게다가 ProcessFileData 함수에 약간의 차이가 있지만 이전에 디버그 메시지가 있던 곳의 코드가있는 이전 버전의 코드는 Chrome에서도 정상적으로 작동합니다. 다음 중 하나에 중간 선을 교체

:이 '바인드해야한다는 것 때문에

jQuery.get('img/' + file + '.txt', this.ProcessFileData); 
jQuery.get('img/' + file + '.txt', function() { debug.print("check"); }); 

은 (는 프로그램의 나머지 부분이 의도 한대로 작동하지 의미하지만) 충돌에서 크롬을 중지 '방법으로 문제를 일으켰습니다. 비록 6 개월 동안 프로젝트의 일부분 이었지만 (콜백이 제대로 작동하지 않아서),이 문제는 불과 몇 주 전에 만 발생했습니다. 구형 브라우저와의 호환성을 위해 ddr-ecma5 라이브러리를 사용하고 있습니다 만, 아무런 효과가 없도록 시도했습니다.

콜백의 바인드 메소드가 충돌을 일으키는 이유는 누구나 알 수 있습니까?이 문제를 어떻게 해결할 수 있습니까? 문제를 해결하는 bind 메서드를 사용하는 것을 피할 수있는 방법이 있습니까? 또한 ProcessFileData 함수가 반환되는 파일을 알 수있게 해주시겠습니까?

답변

0

나는 당신의 호출이 실패해야하는 이유를 전혀 모른다. 코드 어딘가에 무한 루프가있는 것처럼 들린다.

익명 함수에 ProcessFileData을 다른 변수에 외부 this을 저장하고 호출 bind을 사용하지 : 나는 외부 변수에 '이'절약 생각

var that = this; 
jQuery.get('img/' + file + '.txt', function(e) { 
    that.ProcessFileData(e); 
}); 
+0

내가 발견하기 전에 시도 무엇인가 ' bind '명령을 사용했지만, 나는 그 명령을 제대로 작동시키지 못했기 때문에 잘못하고 있었음에 틀림 없다. – David

+0

문제는 제 코드를 변경하지 않고 사라졌습니다. 제가 한 유일한 일은 브라우저 캐시에로드되는 모든 파일의 최신 사본이 있는지 확인하는 것입니다 (필자는 며칠 전에 그 중 일부 , 그러나 분명히 그들 모두는 아니다). ProcessFileData는 파일의 약간을보고, 어떤 종류의 데이터인지 판단하고, 그에 따라 처리하고 파일을 따라 적절한 거리를 이동합니다. Chrome의 캐시 된 파일에서 만료 된 형식을 인식하지 못하면 조금 처리하지 못하고 이동하지 않아 막혔습니다. 마치 무한 루프였습니다. – David