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

Django中Ajax请求无法向视图传参,QueryDict为空

问题解决:Ajax POST请求后Django后端request.QueryDict为空

问题原因

你设置了contentType:"application/json",将请求体以JSON格式发送,但Django默认只会解析application/x-www-form-urlencoded或multipart/form-data类型的请求到request.POST,JSON格式的数据需要从request.body中读取解析。

解决方案

方案一:修改前端,使用默认表单编码

去掉contentType:"application/json"配置,jQuery会自动以application/x-www-form-urlencoded格式发送数据,这样Django就能把数据解析到request.POST中:

var coin = Number(localStorage.getItem("coin"))
if (coin!=0) {
    $.ajax({
        url:"/",
        method:"POST",
        headers:{"X-CSRFToken":$("input[name=csrfmiddlewaretoken]").val()},
        data:{"coin":coin},
        // 移除contentType配置
        success:function(data){
            console.log(data)
            localStorage.setItem("coin",0)
        },
        error:function(errMsg){
            console.log(errMsg)
            localStorage.setItem("coin",0)
        }
    })
}

此时后端request.POST就能获取到coin数据,控制台会输出你期望的<QueryDict: {"coin": "xxx"}>。

方案二:后端解析JSON数据

如果需要保持JSON格式发送请求,后端需要手动解析request.body:

import json
from django.http import JsonResponse

elif request.method == "POST":
    # 解析JSON请求体
    data = json.loads(request.body)
    print(data)  # 输出: {"coin": 你发送的数值}
    response = JsonResponse({"a":"b"},status=200)
    return response

这种方式下request.POST依然为空,但你可以从解析后的data字典中获取coin值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:27:13