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

Django中AJAX发送POST请求时request.POST获取nums值为None的问题求助

问题原因
  • jQuery发送数组类型参数时,默认会自动在参数名后拼接[],你前端声明参数是nums,实际发送到后端的参数名是nums[],所以用request.POST.get('nums')肯定获取不到值
  • 数组属于多值参数,Django中不能直接用get()方法获取,需要用getlist()方法读取多值参数
  • 另外注意Django 3.1+已经废弃了request.is_ajax()方法,你的写法request.is_ajax还缺少括号,高版本Django中这个判断会一直不生效
解决方法

你可以根据自己的业务场景选择以下任意一种方案:

方案1:不修改前端传参逻辑,直接适配后端取值

直接调整后端取值逻辑即可:

def creating_profile(request):
    # 兼容所有Django版本的AJAX请求判断,也可直接保留request.method == "POST"判断
    if request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' and request.method == "POST":
        # 参数名加[]后缀,用getlist获取数组
        array = request.POST.getlist('nums[]')
        print(array)
    else:
        print("it's not ajax")

方案2:前端禁用参数自动追加规则,后端按原名称取值

前端AJAX配置新增traditional: true,关闭jQuery的深度序列化规则:

const RegisterForm = document.forms["RegisterForm"];
const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
let nums = [1, 2, 3]
RegisterForm.addEventListener('submit', () => {
    $.ajax({
        headers: { 'X-CSRFToken': csrftoken },
        url: '/account/creating-profile/',
        type: 'POST',
        data: { nums: nums },
        traditional: true, // 新增这一行配置
        success: function (data) {
            // 业务逻辑
        }
    });
});

后端对应调整取值逻辑:

def creating_profile(request):
    if request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' and request.method == "POST":
        array = request.POST.getlist('nums')
        print(array)
    else:
        print("it's not ajax")

方案3:传递JSON格式数据(适合复杂参数场景)

如果后续会传递更复杂的嵌套参数,可以直接用JSON格式传参:

const RegisterForm = document.forms["RegisterForm"];
const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
let nums = [1, 2, 3]
RegisterForm.addEventListener('submit', () => {
    $.ajax({
        headers: { 'X-CSRFToken': csrftoken },
        url: '/account/creating-profile/',
        type: 'POST',
        contentType: 'application/json', // 指定传参格式为JSON
        data: JSON.stringify({ nums: nums }), // 把参数序列化为JSON字符串
        success: function (data) {
            // 业务逻辑
        }
    });
});

后端从请求体中读取解析JSON即可:

import json

def creating_profile(request):
    if request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' and request.method == "POST":
        data = json.loads(request.body)
        array = data.get('nums')
        print(array)
    else:
        print("it's not ajax")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:48:03