开始攀登 ajax 学习曲线,我尝试对我的 CherryPy 应用程序进行简单的 ajax 回调,并将数据发送回浏览器。
我的 ajax 调用正在运行,我可以将请求方法返回给浏览器。
但是,我无法在 CherryPy 处理程序内的请求对象中找到浏览器发送的数据。这是我的 CherryPy 处理程序,抄袭自 this question :
class Contact:
def index(self):
cl = cherrypy.request.headers['Content-Length']
rawbody = cherrypy.request.body.read(int(cl))
body = None
#body = simplejson.loads(rawbody)
if body is None:
return cherrypy.request.method + ' (no body found)'
else:
return cherrypy.request.method + ' ' + body
index.exposed = True
这是我的 JavaScript:
<script type="text/javascript">
function SendContactEntry() {
$.ajax( {type: "POST",
url: "/contact/",
data: { word: "HELLO" },
processData: false,
cache: false,
contentType: "application/json",
dataType: "text",
success: function (response){
alert(response);
}
}
);
}
</script>
使用此代码,我的浏览器收到“POST(未找到正文)”响应。
我想做的是在我的 CherryPy 处理程序中了解到我收到了 word
“HELLO”的值。
如果我取消注释行 body = simplejson.loads(rawbody)
我收到 CherryPy 发回的 HTML 状态 500。如果我尝试用 @cherrypy.tools.json_in()
装饰我的 index() 函数,也会发生同样的情况.
最佳答案
由于您已将 processData
设置为 false
并且您正在传递一个对象,因此您正在通过数据对象的字符串化版本发送 - 并且没有任何内容可看。
或者:
- 在发送数据对象之前调用
JSON.stringify
(这应该会使您的simplejson.loads
调用起作用)。 - 删除
processData
属性,让 jQuery 将请求作为正常的 URL 编码请求发送(您可以通过request.params["word"] 访问您的变量
).
关于jquery - 如何在 CherryPy 中接收 AJAX 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577831/