2013-05-03 3 views
0

코드 스 니펫을 읽고이 이상한 자바 스크립트 문제가 발생했을 때 어떻게 작동하는지 알아 냈습니다. 자신의 자바 스크립트에서Javascript는 Json 객체와 문자열을 어떻게 구분합니까?

그들은

var apiUrl = '/api/v1/pin/?format=json&order_by=-id&offset='+String(offset); 
... 
$.get(apiUrl, function(pins) { 
    for (...; i < pins.objects.length; i++) ... // works fine 
}); 

자신의 API를 반환이 JSON 형식이라는 : ​​

{"meta": {"limit": 50, "next": "?limit=50&format=json&order_by=-id&offset=60", "offset":  
10, "previous": null, "total_count": 79}, "objects": [ {...},{...}, ... ]} 

내가 그것을 모방하려고 노력을하지만 $의 갔지 내 단순화 된 JSON 문자열을 인정하지 않았다.

// my attempt 
$.get(myApiUrl, function(pins) { 
    for (...; i < pins.objects.length; i++) ... // ERROR: undefined length 
}); 

My Json 문자열은 비슷하지만 축약 된 형식입니다.

{"objects": [{...},{...}, ... ]} 

$ .getJson() 명령을 검색하기 전에는 작동하지 않습니다. 나는 왜 자바 스크립트 코드가 단지 $ .get으로 작동하는지 궁금해하지만, 내 것은 $ .getJson을 사용해야한다. ??

자바 스크립트에서 json으로 읽도록 설정할 수있는 헤더인가요?

+1

응답 유형 application/json 어쩌면 – HMR

답변

3

명시 적으로 컨텐츠 유형을 지정하지 않으면 jQuery는 서버가 리턴 한 헤더를 기반으로 데이터 유형을 판별하려고 시도합니다.

JSON 시리얼 라이저를 사용하지 않는 경우 http://jsonlint.com/ 또는 this을 사용하여 JSON의 유효성을 확인하십시오. 그렇지 않으면 오류가 발생합니다. JSON에 대한

올바른 ContentType 머리글은 다음과 같습니다 application/json

+0

감사합니다. 올바른 헤더를 설정 한 후 내 문제가 해결되었습니다. –

2

설정 HTTP 응답 헤더 Content-Type

application/json에 : 두 경우 모두

HTTP/1.1 200 OK 
Content-Type: application/json 
3

는 AJAX 호출이 문자열을 반환합니다. jQuery 어떻게 든 그것을 어떻게 해야할지 알아야합니다. 방법은 dataType 옵션에 따라 다릅니다.

문서는 기본값 인 Intelligent guess을 호출합니다. 그래서 추측하는 방법? 응답 헤더 인 Content-Type을 평가하십시오. application/json 인 경우 jQuery은 개체를 만들려고 시도합니다.

jQuery이 항상 응답을 JSON으로 해석하도록하려면 dataTypejson으로 설정할 수 있습니다.

관련 문제