Рабочий пример:
import cherrypy
import simplejson
class Root(object):
@cherrypy.expose
def update(self):
cl = cherrypy.request.headers['Content-Length']
rawbody = cherrypy.request.body.read(int(cl))
body = simplejson.loads(rawbody)
# do_something_with(body)
return "Updated %r." % (body,)
@cherrypy.expose
def index(self):
return """
<html>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type='text/javascript'>
function Update() {
$.ajax({
type: 'POST',
url: "update",
contentType: "application/json",
processData: false,
data: $('#updatebox').val(),
success: function(data) {alert(data);},
dataType: "text"
});
}
</script>
<body>
<input type='textbox' id='updatebox' value='{}' size='20' />
<input type='submit' value='Update' onClick='Update(); return false' />
</body>
</html>
"""
cherrypy.quickstart(Root())
Документ, на который вы ссылались, описывает пару инструментов CherryPy, которые появились в версии 3.2.Инструмент json_in
в основном выполняет все вышеперечисленное, с большей тщательностью и используя новый API обработки тела в 3.2.
Одна важная вещь, на которую следует обратить внимание, это то, что функция post
в jQuery, похоже, не способнаотправить JSON (только получить его).Аргумент dataType
указывает тип данных, который, как вы ожидаете, XmlHTTPRequest будет получать , а не тип, который он будет отправлять, и, кажется, не существует аргумента для указания типа, который вы хотитеОтправить.Использование ajax()
позволяет вместо этого указать это.