2013-06-27 3 views
0

저는 BaseHTTPServer 및 CGIHTTPServer를 기반으로하는 간단한 웹 응용 프로그램에 Python을 사용하고 있습니다.Python CGI 및 json 덤프

ajax 호출에 약간의 문제가 있습니다.이 문제는 사전을 선택하여 선택 위젯을 채 웁니다. 서버 측 파일 list.py에서

$.getJSON("/web/ajax/list.py", function(result) { 
    $.each(result, function(key, value){ 
     $("#list").append("<option id=" + key + ">" + value + "</option>"); 
    }); 
}); 

단순히 json.dumps를 사용하여 사전 내용을 덤프 할 수는 없지만 나 ': 인 "목록"선택 ID는이 동적으로 옵션을 채우기 위해 자바 스크립트 코드 그렇게하기 전에 일부 빈 줄을 인쇄하도록 강요 M :

options = {} 
options[1] = "option 1" 
options[2] = "option 2" 
options[3] = "option 3" 

# Whitout these two lines it doesn't work!! 
print """ 
""" 

import json 
print json.dumps(options) 

이 사전을 덤핑으로 만 작동하지 않는 이유는 어떤 아이디어?

나는 여분의 인쇄물을 없애고 싶습니다.

답변

2

cgi에는 서버에 인쇄 할 내용이 매우 엄격합니다. 특히 응답 헤더 집합, 응답 본문 및 두 행 사이의 빈 줄을 제공하여 서버가 헤더가 중지되고 본문이 시작되는 위치를 알 수 있도록해야합니다.

즉, 새 줄은 이 아니며 불필요합니다. 사실, 당신은 아마 좀 더 추가해야합니다 :

body = json.dumps(...) 

print "Status: 200 OK" 
print "Content-Type: application/json" 
print "Length:", len(body) 
print "" 
print body 
2

가 꽤 가까운 ... 더 HTTP 헤더 "길이"가 없으며, 콘텐츠 길이가 엄격하게 필요한 것은 아니지만, 당신이 알고있는 경우는 다음과 같이 추가 :

print "Status: 200 OK" 
print "Content-Type: application/json" 
print "Content-Length: %d" % (len(body)) 
print "" 
print body