问题描述
不幸的是我没有得到阿贾克斯与CherryPy的正常工作。这是我的蟒蛇code:
Unfortunately i dont get ajax to work properly with cherrypy.Here is my python code:
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())
和这里是我的HTML模板:
and Here is my html template:
<html>
<head>
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("button").click(function() {
$.ajax({
url: "switch",
type: "POST",
data: {id: $(this).attr('id')},
succes: function(response) {
$("#test").html(response);
}
});
});
});
</script>
</head>
<body>
<h1>Hallo Haus!</h1>
<button id=1>Licht 1</button> </br>
<button id=2>Licht 2</button> </br>
<button id=3>Licht 3</button> </br>
<button id=4>Licht 4</button>
<div id=test></div>
</body>
</html>
如果我preSS这4按钮中的一个,我得到了正确的标识印在我的控制台。上面的例子
If i press one of those 4 buttons i get the right id printed in my console.The above example
return json.dumps({"text" : "schalter {} ".format(id)})
写在最toturials我发现,但不幸的是这给了我一个错误:
is written on the most toturials i found, but unfortunately this gives me an 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.
因此,数据成功地发送到CherryPy的,但我没有拿回来。任何帮助,如何得到这个工作?
So the data is succesfully send to cherrypy, but i did not get it back.Any help how to get this to work?
推荐答案
尝试添加@ cherrypy.tools.json_out()和交换机处理......
Try adding @cherrypy.tools.json_out() to your switch handler...
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 """<html>
<head>
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("button").click(function() {
$.ajax({
url: "switch",
type: "POST",
data: {id: $(this).attr('id')},
success: function(response) {
alert(response);
$("#test").html(response);
}
});
});
});
</script>
</head>
<body>
<h1>Hallo Haus!</h1>
<button id=1>Licht 1</button> </br>
<button id=2>Licht 2</button> </br>
<button id=3>Licht 3</button> </br>
<button id=4>Licht 4</button>
<div id=test></div>
</body>
</html>"""
@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())
希望这有助于!
Hope this helps!
这篇关于获取数据回从Python程序的CherryPy和jQuery / AJAX的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!