2013-06-27 53 views
0

我正在使用基於BaseHTTPServer和CGIHTTPServer的輕型web應用程序。Python CGI和json轉儲

我有一個ajax調用的小問題,它會檢索一個字典來填充選定的小部件。 作爲「列表」選擇ID,這是JavaScript代碼來動態填充選項:

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

在服務器端文件list.py我不能簡單地傾倒詞典內容使用json.dumps但我中號被迫這樣做之前打印一些空行:

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