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.
Not sure what you mean by "without using tools" -- Python is "a tool", right?
With just Python and its standard library (2.6 or better), add at the top of your module
import json
and change the return
statement to
return json.dumps(message)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With