2013-12-15 25 views
0

收到字典我試圖從網頁GAE self.request.get()不從POST

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

發送和接收,在GAE和嘗試填充NDB條目以POSTDATA

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

填充不起作用,但結果:TypeError:_ **之後的**參數必須是映射,而不是unicode

我在Ajax/post端或GAE端做錯了什麼?

但如果我硬編碼「在Python

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

字典完美的作品。

您能否告訴我我做錯了什麼。

回答

0

你的問題是self.request.get('postdata')返回一個字符串,因爲它被張貼爲url編碼數據。你需要:

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

......如果你想採取這種方法。你也應該考慮,如果你想發佈顯然是平的數據作爲JSON,當基本URL編碼將工作:

$.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仍然會將數據視爲一個字符串。

+0

那樣簡單。鏈接到JQuery移植JSON也非常有幫助。非常感謝尼克。 – MattiK