我尝试从网页发送
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()
完美无缺。
你能告诉我我做错了什么。
答案 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仍会将数据视为字符串。