无法从jQuery检索发布到Django的对象数组
Unable to retrieve an Array of objects posted to Django from jQuery
我的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[]"作为参数名,所以我的发布数据是:
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对象进行编码。这些不能通过GET或POST参数直接传递。
在使用jQuery POST
(即用{ "size":"3", "color":"1" ... }
括起来的任意数据)之前,请尝试对JavaScript对象调用JSON.stringify()。例如:
[
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对象。
相关文章:
- 在模板中为Django表单分离媒体类对象的JS和CSS列表输出
- 通过AJAX调用将JSON对象发送到Django后端
- 在Django后端,FormData()对象始终为空
- 在 django 中接收嵌套的 JSON 对象
- Django 无法在视图中创建常规对象,返回 500 错误
- 使用 jQuery 选择 Django 对象
- 在 Django 视图中检索嵌套的 JavaScript 对象作为字典
- Django -- 为数据库对象的网页生成 URL
- Django:从QueryDict读取JSON对象数组
- 如何访问django中的itertools对象
- 编码对象的Django模板变量查找
- 从python中检索json对象(使用Django)-Javascript
- 无法从jQuery检索发布到Django的对象数组
- Django:防止重复对象创建的策略
- Django Rest框架:在JSON对象内循环
- 通过Django模板变量将Python对象传递给JavaScript
- 从服务器端Python获取JSON对象到客户端Django模板
- 序列化Django URL的JSON对象
- 从JSON序列化的django对象访问字段值
- 可能的话,用Jquery更新Django对象