0

jsonp 호출을 복제하기 위해 자체 맞춤 라이브러리를 사용하고 있습니다. 사람들이 JQuery 나 다른 라이브러리를 사용하기 전에 몇 가지 제약으로 인해 사용할 수 없다고 말해 보겠습니다. 이 JavaScript 스크립트 동적 스크립트 로딩 IE6 문제

 
BurrpJsonAjaxRequest.prototype.send = function() { 
    this.script = document.createElement("script"); 
    this.script.type = "text/javascript"; 
    this.script.charset = "UTF-8"; 
    this.script.src = this.URL; 

    if (typeof(this.callBack) == "function") { 
    this.script.callback = this.callBack; 
    } 

    var currRequest = this; 

    //sleep(100); 

    if (this.script.src.readyState) { //IE 
    this.script.src.onreadystatechange = function() { 
     if (this.script.src.readyState == "loaded" || 
     this.script.src.readyState == "complete") { 
     this.script.src.onreadystatechange = null; 
     currRequest.hideLoading(); 
     currRequest.callback(); 
     } 
    }; 
    } else { //Others 
    this.script.src.onload = function() { 
     currRequest.hideLoading(); 
     currRequest.callback(); 
    }; 
    } 


    this.docHead.appendChild(this.script); 
}; 

이 그것을 실행 처음 작동 : 아래

는 요청을하는 데 사용되는 코드입니다. 후속 실행에서는 요청이 만들어 지지만 콜백은 실행되지 않습니다.

아래와 같이 sleep 메소드 (코드에 주석 처리 됨)를 사용하면 후속 호출에서도 콜백이 실행됩니다.

 
function sleep(milliseconds) { 
    var start = new Date().getTime(); 
    for (var i = 0; i milliseconds){ 
     break; 
    } 
    } 
} 

수면은 콜백 실행에 어떤 영향을 줍니까? Firefox에서 잘 작동합니다.

답변

0

처음으로 this.script.src.readyState는 거짓 (스크립트가 여전히로드 됨)이며 onLoad 이벤트에 대한 처리기가 만들어집니다. onLoad가 트리거되면 익명 onLoad 함수가 호출됩니다.이 함수는 onReadyStateChange 핸들러와 매우 유사합니다. 그러나 onLoad는 한 번만 트리거되므로 함수는 한 번만 호출됩니다.

sleep은 실행 enuf를 늦추므로 if 문을 실행할 때 this.script.src.readyState가 true입니다.

당신은 어떻게 생각하십니까?

+0

저는 이것을 객체로 사용하고, 객체가 사용될 때마다 객체를 인스턴스화합니다. 또한 파이어 폭스에서도 완벽하게 작동합니다. 문제는 IE6뿐입니다. – Abhi

+0

수면에 영향이 있다는 사실은 타이밍 문제 (분명히)를 암시합니다. IE6에서 서버로 트래픽을 감지하고 FF 트래픽과 비교 했습니까? – Upperstage

+0

나는 Fiddler를 사용하여 요청 응답을 보려고합니다. 두 경우 모두 (수면과 수면 없음) 요청이 전송되고 응답이 돌아 왔지만 잠자기가없는 경우 Fiddler는 세션이 중단되었다고 전합니다. 이것은 무엇을 의미 하는가? IE가 세션을 중단하고 있습니까? – Abhi

관련 문제