You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django框架下使用AJAX传递数组到后端失败问题求助

问题根因

jQuery的AJAX在传递数组类型参数时,默认会启用参数深度序列化规则,自动给数组对应的参数名追加[]后缀。你前端声明的参数是num1,实际发送到后端的参数名会变为num1[],因此你在Django视图中用request.POST.get('num1')无法匹配到对应参数,返回None。


可行解决方法

方法1:前端开启traditional序列化模式(最便捷)

在AJAX配置中添加traditional: true参数,禁用jQuery的深度序列化,保持参数名不变,后端仅需调整取值方法即可:

function add_var() {
    var aa = [5,10,15];
    $.ajax({
        url : "add_variable/",
        type : "POST",
        traditional: true, // 新增这一行配置
        data : { num1 : aa},
        success : function(json) {
            $('#num3').val(json); 
        },
        error : function() {
            console.log("fail");
        }
    });
};

后端Django取值代码:

# 多值参数不能用get,必须用getlist才能拿到完整数组
num_list = request.POST.getlist('num1')
# 如需转换为数值类型可自行处理:
num_list = list(map(int, num_list))

方法2:后端直接匹配带[]的参数名

如果不想修改前端代码,直接在Django中适配实际收到的参数名即可:

num_list = request.POST.getlist('num1[]')

方法3:前端转JSON字符串传递,后端解析

适合传递复杂嵌套结构的场景,前端先把数组转为JSON字符串发送:

function add_var() {
    var aa = [5,10,15];
    $.ajax({
        url : "add_variable/",
        type : "POST",
        data : { num1 : JSON.stringify(aa)},
        success : function(json) {
            $('#num3').val(json); 
        },
        error : function() {
            console.log("fail");
        }
    });
};

后端解析JSON即可:

import json
num_list = json.loads(request.POST.get('num1'))

内容的提问来源于stack exchange,提问作者MC2020

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:54:04