我想从 jquery/Ajax 请求接收 Django 视图中的数组数据,但由于某种原因我无法正确执行此操作。 这是一段js代码:
var arr = [1, 2];
$.ajax({
type: 'POST',
url: '/go/',
data: {arr: arr},
success: function (data) {
console.log('Success!');
},
});
这是来自 Django 视图:
def go(request):
if request.method == 'POST':
arr = request.POST['arr']
它给了我
KeyError: 'arr'
如果我在 Django 中执行
print(request.POST)
,它会像这样打印:<QueryDict: {'arr[]': ['1', '2']}>
。一些方括号出现在“arr”键之后。然后,如果我使用带方括号的键执行 arr = request.POST['arr[]']
操作,它会分配 arr
值 2
,因此只有数组的最后一个值。有人可以向我解释一下为什么会发生这种情况吗?
键的名称是
'arr[]'
,因为它包含一个数组,因此您可以通过以下方式访问它:
def go(request):
if request.method == 'POST':
arr = request.POST.getlist('arr[]')
.getlist(…)
[Django-doc] 来检索所有值,因为不同的元素都作为单独的键值项传递。
您正在传递一个列表,因此需要使用 getlist 方法来检索数据。
您可以将参数
traditional: true
添加到您的ajax请求中。这迫使使用传统风格的参数序列化,摆脱查询键中的方括号。
var arr = [1, 2];
$.ajax({
type: 'POST',
url: '/go/',
data: {arr: arr},
traditional: true,
success: function (data) {
console.log('Success!');
},
});