2011-03-11 3 views
2

내가 크로스 도메인 GET을 수행하려면 다음 사용하는 것을 시도하고있다 :왜 dojo.io.script.get()은 404 오류 메시지를받을 때 제공된 오류 함수를 실행하지 않습니까?

dojo.io.script.get({ 
    url: myUrl, 
    callbackParamName: "callback", 
    preventCache: true, 
    load: dojo.hitch(this, loadFunction), 
    error: dojo.hitch(this, function() { 
    console.log('Error!!!'); 
    }) 
}); 

로드 기능을하지만, 잘 실행, 서버는 404을 반환 할 때 오류 기능이 실행되지 않습니다. 아무도 그 이유를 말할 수 있습니까?

편집은 일부 조사 후, 나는 시간 제한 및 처리기는 다음과 같은 방법으로 구현 될 수 있음을 발견

dojo.io.script.get({ 
    url: myUrl, 
    callbackParamName: "callback", 
    timeout: 2000 
}).then(function(data){ 
    console.log(data); 
}, function(error){ 
    alert(error); 
}); 

이것은 dojo.Deferred 객체가 제공하는 기능을 사용합니다.

답변

2

스크립트 태그 (즉, dojo.io.script.get)를 사용하여 서버에 액세스 할 때 상태 코드와 헤더를 사용할 수 없습니다.

시간 초과 및 스크립트 내용 분석과 같은 다른 방법으로 문제를 감지 할 수 있습니다. 후자는 JSONP 호출에 문제가있다 (예를 들어).

+0

감사합니다. Eugene. 나는 dojo에 대한 많은 경험이 없으며, jQuery 용 jsonp 플러그인을 사용하여이 문제에 결코 빠지지 않았습니다. 그래서 놀랍게도 저를 데려갔습니다. 플러그인이 당신이 제안한 것처럼 체크를해야한다고 생각합니다. 해당 코드를 자세히 살펴보십시오. –

0

나는 이것이 오래되었다는 것을 알았지 만, 나는 다른 사람들처럼이 해결책을 공유 할 것이라고 생각했다.

dojo.io.script은 기본적으로 <script/>을 html 페이지에 추가합니다. 그래서 당신이 시도 할 수 있습니다 :

var script = document.createElement('script'); 
    script.setAttribute('type', 'text/javascript'); 
    script.setAttribute('src', myUrl); 
    script.onerror = function() { 
     debugger 
    } 
    script.onload = function() { 
     debugger 
    } 
    document.getElementsByTagName('body')[0].appendChild(script); 

그 방법을 스크립트가 onerror 이벤트가 호출 될 때로드에 실패합니다.

* 모든 인스턴스에서 작동하지는 않지만 좋은 시작일 수 있습니다.