无法从jQuery中发布到Django的对象数组中检索对象数组

3

我的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":"",
        }
    ]
}

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']}>

无论我做什么,都不能得到我期望的列表。我希望获得一个Python列表,其中包含每个'box'对象的字典。

有人建议我在JavaScript中使用参数名'boxes []',那么我的post数据将是:

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字符串列表。实际上没有任何对象数据。

这个问题之前被标记为重复,解决方法是在JavaScript参数名称中添加[],但正如您在这篇修订后的帖子中所看到的那样 - 这并没有解决问题。这个问题不同之处在于它是一个对象列表,而不仅仅是一个简单的列表。 - Ben174
1个回答

6

在使用GET或POST参数传递JavaScript对象时,您需要首先对其进行编码。

在使用jQuery POST提交之前,请尝试调用JSON.stringify()将JavaScript对象转换为字符串(即用{ "size":"3", "color":"1" ... }包含的任意数据)。例如:

[

    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对象。

谢谢!我以为我可以在POST中发布本地对象,但是它们确实需要被序列化。感谢您的帮助!! - Ben174

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接