In my controller/request-handler, I have the following code:
def monkey(self, **kwargs):
cherrypy.response.headers['Content-Type'] = "application/json"
message = {"message" : "Hello World!" }
return message
monkey.exposed = True
And, in my view, I've got this 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>";
}
}
);
});
And finally, here's my problem. I get no JSON response and I'm not sure why.
Secondly, would someone be able to explain how to format data in my controller/request-handler response as a JSON response in the simplest way possible, without using tools?
Since CherryPy 3.2 there are tools to accept/return JSON:
@cherrypy.expose
@cherrypy.tools.json_out()
def monkey(self, **params):
return {"message": "Hello World!"}
Using json_out
serializes the output and sets the appropriate Content-Type header for you.
Similarly decorating with @cherrypy.tools.json_in()
can automatically accept/decode JSON post requests.