2012-10-24 24 views
1

我一直在研究应用程序引擎一段时间,这个问题一直困扰着我。找不到解决方案,所以我想问问。对jQuery.post进行python应用程序引擎时未解码的JSON对象

我在应用程序引擎服务器中的python中获得了一个简单的后处理程序。我正在做一个jQuery的帖子。两个代码是这样的

main.py

import json 
... 

class SomeHandler(webapp2.RequestHandler): 
    def post(self): 
     data = json.loads(self.request.body) 
     return self.response.out.write(json.dumps(data)) 

而jQuery的发布

jQuery.post('/quiz', 
{name:'some problem 2',desc:'some submitted 2',questions:[{question:'question1'}]}, 
function(data,textStatus, jqXHR){console.log('POST response: ');console.log(data);}); 

当我这样做,我得到以下错误

Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1536, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1530, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1102, in __call__ 
    return handler.dispatch() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 572, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 570, in dispatch 
    return method(*args, **kwargs) 
    File "/Users/adityarao/appengine/Quiz_1/main.py", line 121, in post 
    data = json.loads(self.request.body) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads 
    return _default_decoder.decode(s) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 384, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

一种解决方法是单独获取请求参数(request.body.get(“some_param”)),但我觉得它很单调乏味,在处理列表参数时工作。

我在这里错过了什么吗?

回答

6

关键是你是不是张贴application/json数据,但application/x-www-form-urlencoded数据,你应该使用这样的代码:

$.ajax({ 
    type: 'POST', 
    url: '/quiz', 
    data: JSON.stringify({ name: 'some problem 2', desc: 'some submitted 2', questions: [ { question: 'question1' } ] }), 
    contentType: 'application/json', 
    success: function(data,textStatus, jqXHR) { 
     console.log('POST response: '); 
     console.log(data); 
    } 
}); 
+0

酷!我想这是如何在backbone.js或类似框架中完成的。感谢你的回答! – adifire

相关问题