在我的控制器/请求处理程序中,我有以下代码:
def monkey(self, **kwargs):
cherrypy.response.headers['Content-Type'] = "application/json"
message = {"message" : "Hello World!" }
return message
monkey.exposed = True
而且,在我看来,我有这个javascript:
$(function() {
var body = document.getElementsByTagName("body")[0];
$.ajaxSetup({
scriptCharset : "utf-8",
contentType: "application/json; charset=utf-8"
});
$.post("http://localhost/wsgi/raspberry/monkey", "somePostData",
function(data) {
try{
var response = jQuery.parseJSON(data);
body.innerHTML += "<span class='notify'>" + response + "</span>";
}catch(e){
body.innerHTML += "<span class='error'>" + e + "</span>";
}
}
);
});
最后,这是我的问题。我没有得到JSON响应,我不知道为什么。
其次,有人能够在不使用工具的情况下,以最简单的方式解释如何将控制器/请求处理程序响应中的数据格式化为JSON响应吗?
答案 0 :(得分:36)
自CherryPy 3.2以来,有一些工具可以接受/返回JSON:
@cherrypy.expose
@cherrypy.tools.json_out()
def monkey(self, **params):
return {"message": "Hello World!"}
使用json_out
序列化输出并为您设置适当的Content-Type标头。
同样使用@cherrypy.tools.json_in()
进行装饰可以自动接受/解码JSON帖子请求。
答案 1 :(得分:14)
不确定“不使用工具”是什么意思 - Python 是“工具”,对吗?
只需使用Python及其标准库(2.6或更高版本),就可以在模块的顶部添加
import json
并将return
语句更改为
return json.dumps(message)