2011-02-04 2 views
2

구글 앱 엔진 서버가 POST에 대한 응답으로 JSON 문자열을 반환하기 :jQuery를이 JSON 응답을 이해할 수 없다 "응용 프로그램/JSON"

self.response.headers.add_header("Content-Type", "application/json")  
return self.response.out.write(json_string) 

이 내 지역 개발에서 작동 Google App Engine Launcher에서 실행중인 서버. 헤더가 설정되고 jQuery 코드가 응답을 올바르게 구문 분석하고 있습니다.

그러나 프로덕션 환경에서 Google 프런트 엔드 (프로덕션 환경에 배포 할 때)에서는 jQuery가 응답을 올바르게 구문 분석하지 않아 페이지가 깨졌습니다. 로컬과 프로덕션 사이에서 찾을 수있는 유일한 차이점은 프로덕션의 응답이 Content-Type을 "application/json"으로 설정하려는 시도를 무시하고 있다는 것입니다.

그래서 아마도 내가 불법/비표준 Content-Type을 설정하려한다는 뜻입니다. 하지만 로컬에서 작동하기 때문에 jQuery에서 JSON 문자열을 이해할 수 있습니다.

그래서 jQuery가 JSON이고 올바르게 구문 분석 할 수 있도록 응답 형식을 지정하려면 어떻게해야합니까?

+0

이 있습니다 : JSON에 상관없이 콘텐츠 유형으로 처리됩니다 App Engine의 응답에 "불법 콘텐츠 유형"이 없습니다. 올바른 콘텐츠 유형을 설정하지 않는다는 것을 어떻게 결정 했습니까? –

답변

4

는 그냥 dataType AJAX 호출에 인수하고, 프레스토로 "json" 전달, 응답은

+0

어떻게하면됩니까? –

+1

올바른 문서를 찾은 것 같습니다. 뭔가 같은 : \t \t \t \t $ 아약스 ({ \t \t \t \t \t 유형 : "POST", \t \t \t \t URL : "/ 게임 체크인" \t \t \t \t 데이터 : dataString, \t \t \t \t dataType : "json", –

0

어리석은 것처럼 보일 수도 있지만 첫 번째 매개 변수를 add_header으로 대문자로 입력해야하므로 "Content-Type"이됩니까? 로컬 서버는 매개 변수에 대해 용서할 수 있지만 Google 서버는 그대로 헤더를 제출합니다. Firebug 또는 WebKit 개발자 패널을 통해 반환되는 헤더를 확인하여 어떤 응답 헤더를 보내고 있는지 확인할 수 있습니까? 와

+0

시도할만한 가치가 있지만 주사위가 없습니다. 대문자를 반영하도록 소식이 업데이트되었습니다. –

3

보십시오 :

self.response.headers['Content-Type'] = "application/json" 
self.response.out.write(json_string) 
+1

이것은 내가 사용하고있는 것이며, 그것은 나를 위해 작동합니다. Chrome의 개발자 도구를 통해 확인되었습니다. –