如何在CherryPy中接收AJAX数据

时间:2011-09-28 02:56:18

标签: jquery ajax cherrypy

开始攀登ajax学习曲线,我正在尝试将一个简单的ajax调用回到我的CherryPy应用程序并回送发送回浏览器的数据。

我的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收到500状态的HTML状态。如果我尝试用@cherrypy.tools.json_in()装饰我的index()函数,也会发生同样的情况。

2 个答案:

答案 0 :(得分:1)

word可能已在cherrypy.request.params。在那里办理入住手续?

http://www.cherrypy.org/wiki/RequestObject#params

我认为jQuery不会将您放入data的内容转换为JSON对象。 http://api.jquery.com/jQuery.ajax/

答案 1 :(得分:1)

由于您已将processData设置为false,并且您正在通过字符串版本的数据对象传递对象 - 而且没有任何内容可供查看。

或者:

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