GAE self.request.get()没有从POST接收dict

时间:2013-12-15 09:54:39

标签: jquery ajax google-app-engine

我尝试从网页发送

postdata= "{'key': 1}"
$.ajax('/admin/page', {
   type: 'POST',
   data: {
   'postdata': postdata
},

并在GAE中接收并尝试使用postdata填充ndb条目

postdata= self.request.get('postdata')
entry = DB_Class()
entry.populate(**postdata)
entry.put()

Populate不起作用但结果:TypeError:**之后的_populate()参数必须是映射,而不是unicode

我在Ajax / post side或GAE方面做错了什么?

但如果我在Python中硬编码'dict'

postdata= {'key': 1}
entry = DB_Class()
entry.populate(**postdata)
entry.put()

完美无缺。

你能告诉我我做错了什么。

1 个答案:

答案 0 :(得分:0)

你的问题是self.request.get('postdata')返回一个字符串,因为它被发布为url编码数据。你需要:

import json
postdata_str = self.request.get('postdata') 
postdata = json.loads(postdata_str)

...如果你想采取这种方法。您还应该考虑是否要将明显平坦的数据发布为JSON,而基本的网址编码将起作用:

$.ajax('/admin/page', {
   type: 'POST',
   data: {
     'key': 1,
     'foo': 'bar',
   });

使用:

key_str = self.request.get('key') 
key = int(key_str)
foo = self.request.get('foo')

另请参阅jQuery posting JSON以获取更多信息,但请记住,webapp仍会将数据视为字符串。