【问题标题】:Python CGI and json dumpsPython CGI 和 json 转储
【发布时间】:2013-06-25 04:56:08
【问题描述】:

我正在将 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)

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

我想去掉多余的打印。

【问题讨论】:

    标签: python ajax json cgi cgihttpserver


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      也就是说,换行不是多余的;实际上,您可能应该添加更多:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        相关资源
        最近更新 更多