jquery - 如何在 CherryPy 中接收 AJAX 数据

标签 jquery ajax cherrypy

开始攀登 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 并且您正在传递一个对象,因此您正在通过数据对象的字符串化版本发送 - 并且没有任何内容可看。

或者:

  1. 在发送数据对象之前调用 JSON.stringify(这应该会使您的 simplejson.loads 调用起作用)。
  2. 删除 processData 属性,让 jQuery 将请求作为正常的 URL 编码请求发送(您可以通过 request.params["word"] 访问您的变量).

关于jquery - 如何在 CherryPy 中接收 AJAX 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577831/

相关文章:

jquery - 在 WordPress 主题选项页面中排队 jquery-ui 元素

javascript - 为什么在尝试使用 ajax 访问页面时出现 Access-Control-Allow-Origin 错误?

apache - mod_rewrite 中的转义空格

python - 树莓派 : how to send serial command using Ethernet?

python - (Python) 将证书添加到 Bottle 服务器

javascript - 我如何给活跃的 Accordion child 涂色?

javascript - 获取下拉列表的值而不仅仅是 ID

jquery - bootstrap multiselect : TypeError: $(. ..).multiselect 不是一个函数

javascript - 页面重定向后 JQuery POST 中止

php - 如何在用户使用ajax取消关注时切换图标