2012-06-22 3 views
3

나는 그렇게처럼 내 서버에서 일부 JSON 데이터를 가져 오기 위해 노력하고있어 :

나는이 작업을 수행 할 때 error 함수가 호출
var a = $.ajax({ 
    url: "data.json", 
    dataType: 'json', 
    data: null, 
    error: function(data) { 
     console.log("error"); 
    }, 
    success: function(data) { 
     console.log("success"); 
    } 
}); 

(error가 콘솔에 인쇄되어 있습니다).

그러나 내가 호의적으로 a을 조사했을 때 정확한 응답 텍스트가 반환 된 것을 알 수 있습니다.

a

readyState: 4 
responseText: "contents of data.json!" 
status: 200 
statusText: "OK" 

무슨 일이야? 요청이 성공하면 성공 콜백이 실행되지 않는 이유는 무엇입니까?

+3

'responseText'는 유효한 JSON입니까? [JSONLint] (http://jsonlint.com/)로 확인할 수 있습니다. –

+1

@ ianpgall의 대답은 정확하지만, 옵션 개체 끝에는 쉼표가 추가되어 있습니다 (6 행). – Hal

+0

좋은 지적 @harrison_m 34,하지만 적어도 새로운 브라우저에서는 javascript에서 오류가있는 것 같지 않습니다. 필자는 구버전의 IE (어쩌면 더 새로운 것)에서 휴식하는 것을 보았습니다. 간단한 웹 페이지를 만들고 그걸 시험해보고, 오류가 없어야합니다. – Ian

답변

4

아마 당신이 지정한 유형의 isnt 반환됩니다 때문입니다. 응답 자체는 ("a"의 세부 사항을 보면 알 수 있듯이) 성공이지만 succes 또는 error가 실행되는지 여부를 결정하는 유일한 요인은 아닙니다. json을 "dataType"(반환 유형)으로 지정했지만 문자열을 받았습니다. 테스트를 위해, 괜찮아요,하지만 알다시피, 일이 예상대로 실행되지 않습니다. dataType 옵션을 지정하지 않으면 jQuery는 MIME 형식과 응답 내용을보고 반환되는 내용 유형을 확인하려고 시도합니다. 그들이 (당신의 경우 에서처럼) 일치하지 않을 때 그것의 오류.

업데이트 :

나는 위의 내 설명에 산책했다 깨달았다. 당신이 문제를 해결하는 것처럼 보였지만, 다시 설명해 보겠습니다.

상황에 따라 몇 가지 오류가 발생할 수 있습니다. 이해해야 할 중요한 점은 "dataType"을 설정하면 jQuery는 해당 유형의 responseText를 구문 분석하려고 시도한다는 것입니다. 해당 옵션을 설정하지 않으면 추측하고 그에 따라 구문 분석합니다 (즉, MIME 형식을 볼 것임을 의미). 그런 식으로 구문 분석합니다. "dataType"을 지정하면 responseText는 JSON 형식이어야합니다. 따라서 "json"을 지정했지만 문자열을 제공하면 jQuery 구문 분석이 실패합니다. "dataType"및 jQuery 추측을 지정하지 않으면 responseText가 MIME 유형과 일치해야합니다. 따라서 MIME 유형이 "application/json"인 경우 문자열을 반환 할 수 없습니다. 상황이 일치하지 않으면 오류가 발생합니다.

잘하면 도움이됩니다.

+0

마지막 문장을 "반환 된 문자열을 JSON으로 구문 분석 할 수 없습니까?" – alex

+0

감사합니다. @ianpgall. 그게 해결 됐어! (제 질문에 더미 텍스트를 삽입했습니다. 실제 문자열은 JSON과 훨씬 비슷하게 보였지만, JSONLint 테스트가 실패하는 몇 가지 작은 단점이있었습니다.) –

+0

@alex 모르겠지만 대답 : 다행히 OP를 도울 수 있었으면 좋겠다. – Ian

1

"애플리케이션/json"이 반환되는 콘텐츠 유형입니까? 내 직감은 JSON이 다시 돌아올 것이라는 오류가 있지만 구문 분석되지 않는 text/html (또는 다른 일부 내용 유형)이 반환된다는 것입니다.

관련 문제