2014-09-30 13 views
1

我的javascript:無法檢索從jQuery的發佈到Django的對象的數組

var postData = { 
    customer: 'test', 
    order: 1, 
    boxes: [ 
     { 
      "size":"2", 
      "color":"1", 
      "colorNumber":"1", 
      "barCode":"1234567890", 
      "barCodePic":"", 
     }, 
     { 
      "size":"3", 
      "color":"1", 
      "colorNumber":"2", 
      "barCode":"0987654321", 
      "barCodePic":"", 
     } 
    ] 
} 

jQuery.post("http://10.0.1.7:8001/bapi/order/", postData); 

我的Python:

print 'Customer:', request.POST.get('customer', None)     
print 'Order:', request.POST.get('order', None)       
print 'get - boxes:', request.POST.get('boxes', None)      
print 'get - boxes[]:', request.POST.get('boxes[]', None)    
print 'getlist - boxes[]:', request.POST.getlist('boxes[]')    
print 'getlist - boxes:', request.POST.getlist('boxes')                  
print request.POST              

輸出:

Customer: test 
Order: 1 
get - boxes: None 
get - boxes[]: None 
getlist - boxes[]: [] 
getlist - boxes: [] 
<QueryDict: {u'customer': [u'test'], u'boxes[1][barCode]': [u'0987654321'], u'boxes[0][size]': [u'2'], u'boxes[1][colorNumber]': [u'2'], u'boxes[1][size]': [u'3'], u'boxes[0][colorNumber]': [u'1'], u'boxes[1][color]': [u'1'], u'boxes[0][barCode]': [u'1234567890'], u'boxes[1][barCodePic]': [u''], u'boxes[0][barCodePic]': [u''], u'boxes[0][color]': [u'1'], u'order': [u'1']}> 

無論我做讓我我期望的名單。我希望得到一個包含每個'box'對象的字典的python列表。

我一直在建議使用「盒子[]」在JavaScript中的參數名,所以我的文章的數據是:

var postData = { 
    customer: 'test', 
    order: 1, 
    'boxes[]': [ 
     { 
      "size":"2", 
      "color":"1", 
      "colorNumber":"1", 
      "barCode":"1234567890", 
      "barCodePic":"", 
     }, 
     { 
      "size":"3", 
      "color":"1", 
      "colorNumber":"2", 
      "barCode":"0987654321", 
      "barCodePic":"", 
     } 
    ] 
} 

當試圖說,輸出是:

Customer: test 
Order: 1 
get - boxes: None 
get - boxes[]: [object Object] 
getlist - boxes[]: [u'[object Object]', u'[object Object]'] 
getlist - boxes: [] 
POST BELOW 
<QueryDict: {u'customer': [u'test'], u'boxes[]': [u'[object Object]', u'[object Object]'], u'order': [u'1']}> 

你可以在QueryDict中看到,它只是一個包含'[object Object']的unicode字符串列表。實際上沒有對象數據。

+0

這是之前標記爲重複的問題,通過在JavaScript參數名稱中添加[]來解決問題,但正如您在本修訂後的文章中所看到的 - 尚未解決問題。這個問題不同之處在於它是一個對象列表。不只是一個簡單的列表。 – Ben174 2014-09-30 22:36:17

回答

1

您需要首先對JavaScript對象進行編碼。這些不能通過GET或POST參數直接傳遞。

嘗試在JavaScript對象上調用JSON.stringify(),然後使用jQuery(即使用{ "size":"3", "color":"1" ... }包含任意數據)POST。例如:

[ 

    JSON.stringify({ 
     "size":"2", 
     "color":"1", 
     "colorNumber":"1", 
     "barCode":"1234567890", 
     "barCodePic":"", 
    }), 
    JSON.stringify({ 
     "size":"3", 
     "color":"1", 
     "colorNumber":"2", 
     "barCode":"0987654321", 
     "barCodePic":"", 
    }) 

] 

然後內Python中,使用類似將其解碼:

import json 
box_0_string = request.POST.get('boxes[]')[0] 
box_0_dict = json.loads(box_0_string) 

要獲得個人JSON對象。

+0

謝謝!我認爲我可以在POST中發佈本地對象,但是他們確實需要序列化。謝謝您的幫助!! – Ben174 2014-09-30 22:42:51