开始攀登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()函数,也会发生同样的情况。
答案 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
,并且您正在通过字符串版本的数据对象传递对象 - 而且没有任何内容可供查看。
或者:
JSON.stringify
(这应该会使simplejson.loads
调用工作)。processData
属性,让jQuery将请求作为普通的URL编码请求发送(您可以通过request.params["word"]
访问变量。)