2013-06-27 2 views
0

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

У меня есть небольшая проблема с вызовом ajax, который извлекает словарь для заполнения выбранного виджета. Будучи «список» избранный ID это Java-код динамически заполнить параметры:

$.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 «Длина», и в то время как Content-Length не является строго обязательным, если вы знаете, что добавить, как это :

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