我想創建一個包含數組的字典並使用jquery的ajax請求將其發送給GAE。 類似 - {'a':'text', 'b':'othertext','c':['texta','textb']}
我正在手動創建。 我能夠在GAE上使用self.request.get來接收和處理a和b,但不能使用c。GoogleAppEngine使用javascript的JSON對象
是否有任何其他方式在js中創建JSON對象?請提出這種方法最新的錯誤。
我想創建一個包含數組的字典並使用jquery的ajax請求將其發送給GAE。 類似 - {'a':'text', 'b':'othertext','c':['texta','textb']}
我正在手動創建。 我能夠在GAE上使用self.request.get來接收和處理a和b,但不能使用c。GoogleAppEngine使用javascript的JSON對象
是否有任何其他方式在js中創建JSON對象?請提出這種方法最新的錯誤。
據推測,GAE的self.request.get
無法將像字符串數組這樣的複雜對象序列化爲GET請求格式(?a=text&b=othertext...
)。
一個解決辦法,但也許不是一個非常靈活的方式,將是序列化值到JSON自己,並傳遞:
var jsonObj = {
'a':'text',
'b':'othertext',
'cJSON': JSON.stringify(['texta', 'textb'])
};
...然後你當然不得不反序列化cJSON
在接收端。
這很好用!謝謝大衛 – Cool 2010-08-04 04:54:18
你不是真的發送JSON到服務器。當你通過對象jQuery.ajax
(或get
/post
包裝),它將被序列化到GET或POST變量,而不是發送爲JSON,所以你的對象將被轉換爲這樣的事:
a=text&b=othertext&c[]=texta&c[]=textb
如果您希望將整個對象作爲JSON傳遞,您可以通過調用JSON.stringify
(對於本機不支持JSON
對象的瀏覽器,您將需要包含json2.js)來自己轉換它。然後,你可以在任何你想要的名稱的地圖包的JSON編碼字符串:
jQuery.post(url, { json: JSON.stringify({a:'text', ...}) }, ...);
在服務器端,您可以通過調用self.request.get("json")
訪問JSON文本。然後,您將不得不解析JSON字符串以提取值。我對Python不太瞭解,但顯然你只需要導入django.utils.simplejson
並致電simplejson.loads(json)
。
我明白你的意思,但戴維斯解決方案爲我工作,+1爲您的詳細答案。我非常感謝你的幫助。 – Cool 2010-08-04 04:58:22
您實際上正在發送urlencoded請求參數,而不是JSON。 JQuery可能將列表編碼爲同一個參數的多個值,這意味着您可以使用self.request.get_all
來訪問它,這將返回一個列表 - self.request.get
將只返回第一個值。
嗨,尼克,我試過get_all,但它不工作時,我發送'c':['texta','textb'] – Cool 2010-08-04 04:59:38
@Cool:這不重要,因爲你已經工作了,但'get_all'會如果你像這樣調用它:'self.request.get_all(「c []」)''。默認情況下,jQuery在結尾處使用PHP的慣例'put'來將參數視爲數組。 – 2010-08-04 05:44:02
你用什麼jQuery代碼發送請求?我對Python GAE不太瞭解,但似乎request.get處理正常的GET和POST參數,而不是JSON屬性 – 2010-08-02 07:46:49