0

我将 python 用于基于 BaseHTTPServer 和 CGI​​HTTPServer 的轻量级 Web 应用程序。

我有一个 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)

任何想法为什么这不能仅仅通过转储字典来工作?

我想去掉多余的印刷品。

4

2 回答 2

3

非常接近...没有 HTTP 标头“长度”,虽然 Content-Length 不是严格要求的,但如果您知道它,请像这样添加它:

print "Status: 200 OK"
print "Content-Type: application/json"
print "Content-Length: %d" % (len(body))
print ""
print body
于 2014-07-18T17:27:50.143 回答
2

cgi 对您应该为服务器打印的内容有一个非常严格的概念。具体来说,您需要提供一组响应标头、响应正文以及两者之间的空行,以便服务器知道标头停止的位置和正文的开始位置。

也就是说,新线不是多余的;事实上,您可能应该添加更多:

body = json.dumps(...)

print "Status: 200 OK"
print "Content-Type: application/json"
print "Length:", len(body)
print ""
print body
于 2013-06-27T16:01:59.957 回答