Recuperando datos de Python con Cherrypy y jQuery / AJAX

Desafortunadamente no consigo que ajax funcione correctamente con cherrypy. Aquí está mi código de python:

from mako.template import Template from mako.lookup import TemplateLookup import cherrypy import os import json CURDIR = os.getcwd() cherrypy.config.update({ "tools.staticdir.root" : CURDIR, "tools.staticdir.dir" : "static", "tools.staticdir.on" : True }) # Loopuoobjekt für die Templates tmplLookup = TemplateLookup(directories=['templates']) # Liefert das Gerenderte Template zurück def serve_template(templatename, **tmpl_vars): template = tmplLookup.get_template(templatename) return template.render(**tmpl_vars) class Root(object): @cherrypy.expose def index(self): return serve_template("index.html") @cherrypy.expose def switch(self, id): print("Licht nr {} wurde geschaltet".format(id)) cherrypy.response.headers["Content-Type"] = "application/json" return json.dumps({"text" : "schalter {} ".format(id)}) cherrypy.quickstart(Root()) 

y aquí está mi plantilla html:

     $(document).ready(function() { $("button").click(function() { $.ajax({ url: "switch", type: "POST", data: {id: $(this).attr('id')}, succes: function(response) { $("#test").html(response); } }); }); });    

Hallo Haus!




Si presiono uno de esos 4 botones, obtengo el ID correcto impreso en mi consola. El ejemplo anterior

 return json.dumps({"text" : "schalter {} ".format(id)}) 

está escrito en la mayoría de los toturials que encontré, pero desafortunadamente esto me da un error:

 [09/Apr/2014:15:36:57] HTTP Traceback (most recent call last): File "C:\Python33\lib\site-packages\cherrypy-3.2.4-py3.3.egg\cherrypy\_cprequ est.py", line 656, in respond response.body = self.handler() File "C:\Python33\lib\site-packages\cherrypy-3.2.4-py3.3.egg\cherrypy\_cprequ est.py", line 814, in __set__ raise ValueError(self.unicode_err) ValueError: Page handlers MUST return bytes. Use tools.encode if you wish to re turn unicode. 

Así que los datos se envían a cherrypy con éxito, pero no los recuperé. ¿Alguna ayuda sobre cómo hacer que esto funcione?

Intente agregar @ cherrypy.tools.json_out () a su controlador de cambio …

 import cherrypy import os import json CURDIR = os.getcwd() cherrypy.config.update({ "tools.staticdir.dir" : CURDIR, "tools.staticdir.on" : True }) # Loopuoobjekt für die Templates # Liefert das Gerenderte Template zurück class Root(object): @cherrypy.expose def index(self): return """      

Hallo Haus!

""" @cherrypy.expose @cherrypy.tools.json_out() def switch(self, id): print("Licht nr {} wurde geschaltet".format(id)) return json.dumps({"text" : "schalter {} ".format(id)}) cherrypy.quickstart(Root())

¡Espero que esto ayude!