Python CGI и JSON-дампы

Я использую python для легкого веб-приложения на основе BaseHTTPServer и CGIHTTPServer.

У меня есть небольшая проблема с вызовом ajax, который извлекает словарь для заполнения виджета выбора. Будучи "перечисленным" по выбранному идентификатору, это код 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

Довольно близко... Нет HTTP-заголовка "Длина", и хотя Content-Length не является строго обязательным, добавьте его следующим образом:

print "Status: 200 OK"
print "Content-Type: application/json"
print "Content-Length: %d" % (len(body))
print ""
print body
Другие вопросы по тегам