Django中无法正确接收来自Ajax的数据

问题描述 投票:0回答:3

我想从 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
,因此只有数组的最后一个值。有人可以向我解释一下为什么会发生这种情况吗?

jquery django ajax
3个回答
1
投票

键的名称是

'arr[]'
,因为它包含一个数组,因此您可以通过以下方式访问它:

def go(request):
  if request.method == 'POST':
    arr = request.POST.getlist('arr[]')

您需要使用

.getlist(…)
[Django-doc] 来检索所有值,因为不同的元素都作为单独的键值项传递。


1
投票

您正在传递一个列表,因此需要使用 getlist 方法来检索数据。


0
投票

您可以将参数

traditional: true
添加到您的ajax请求中。这迫使使用传统风格的参数序列化,摆脱查询键中的方括号。

var arr = [1, 2];
$.ajax({
    type: 'POST',
    url: '/go/',
    data: {arr: arr},
    traditional: true,
    success: function (data) {
    console.log('Success!');
    },
});
© www.soinside.com 2019 - 2024. All rights reserved.