2011-08-21 3 views
4

iOS 및 Android 플랫폼 용 PhoneGap - Sencha-touch 응용 프로그램을 구축하고 있습니다. Ext.Ajax.request() 함수를 사용하여 로컬 .js 파일을로드하고 있습니다.Ext.Ajax.request()는 요청이 성공하면 실패 콜백 함수를 호출합니다.

재미있는 일이 발생합니다. 요청은 성공하지만 '실패'콜백이 호출됩니다.

Ext.Ajax.request({ 
     url: 'localfolder/foo.js', 
     success : function(xhr){ 
      // not invoked 
     }, 
     failure : function(response, options){ 
      // response.status == 0 
      // wtf, response.responseText contains exactly the contents of the local .js file! 
     } 
    }); 

사람이 실제로 요청이 succedded 때 '실패'콜백이 트리거되는 이유는 아이디어가 있습니다 : 여기 코드인가? 더 중요한 것은 '성공'콜백을 대신 실행되도록하려면 어떻게해야합니까?

+0

response.status은 무엇을 도움이됩니다? – chrixian

+0

response.status == 0 (질문을 편집하고이 정보를 추가 함) – gardenofwine

답변

9

Ext.Ajax는 단순히 생성 한 내부 XHR (XmlHttpRequest) 객체의 상태 코드를 검사합니다. 그러나 (잘못) 상태가 HTTP 상태라고 가정합니다. 이 Mozilla-provided article에 설명되어 있듯이 file : 또는 ftp : schemes가 사용될 때 상태 값 0은 성공을 나타냅니다.

Ext.data.Connection (src/data/Connection.js)의 onComplete 함수를 수정하여 URL 체계를 살펴보고 HTTP 기반 상태 또는 "0 = OK "상태가 성공을 판별합니다.

성공하지 못한 결과가 클라이언트에서 사용할 수있는 본문을 포함하는 것은 완전히 합법적입니다. 따라서 response.responseText가 여전히 올바르게 표시됩니다.

+0

감사합니다. @mmigdol, http :, file : 또는 ftp :에 대한 다른 성공 코드에 대해 몰랐습니다. 실제로는 onComplete 함수를 지정하여 '실패'함수를 재정의 할 수있었습니다. 하지만 내 코드를 좀 더 일관성있게 만들기 위해 'success'함수가 호출되도록하는 방법을 찾고 있습니다. – gardenofwine

0
나는 보통이 같은 응답을 사용하여

, 어쩌면

{ 
    success:true, // success status 
    data: [] // data from process 
} 
+0

안녕하세요, 로컬 .js 파일을로드하는 중, json 객체를 응답에 추가해야하는 이유는 무엇입니까? 응답은 내 로컬 .js 파일의 전체 내용입니다. – gardenofwine

+0

은 {성공 : true, 데이터 : xhr }과 같이 []을 xhr로 바꿉니다. –

관련 문제