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

Django中使用AJAX发送POST请求后端得到空字典如何解决?

你遇到的问题核心是 AJAX请求的Content-Type配置与Django后端取值逻辑不匹配:
你在AJAX中指定了contentType: "application/json",表示要传JSON格式的请求体,但Django的request.POST仅支持解析application/x-www-form-urlencoded和multipart/form-data格式的请求数据,所以拿不到你传的skill_id参数。

方案1(改动最小,推荐):删除AJAX中的自定义contentType配置

jQuery发送AJAX的默认contentType就是application/x-www-form-urlencoded,刚好适配Django的request.POST取值逻辑,直接删掉对应行即可:

let delete_class_list = $('.delete_skill')
delete_class_list.click(function(e){
    let value = this.getAttribute("data-attr")
    // 可加打印确认前端拿到了正确的id
    console.log('要删除的技能id:', value)
    let contain_icon = this
    let contain_label = contain_icon.parentElement.previousSibling
    $.ajax({
        url:'/delete_skill/',
        method : 'POST',
        data: {
            skill_id:value
        },
        dataType: "json",
        // 删掉下面这行contentType配置即可
        // contentType: "application/json",
        success :function(data){
            console.log(data)
            contain_label.remove()
            contain_icon.remove()   
        },
        error:function(e){
            console.log(e)
        }
    })
})

这个方案不需要改动后端视图代码,原有逻辑可以直接生效。另外建议你模板中的data-attr属性加双引号包裹,避免特殊值出现解析异常:

<i class="fas fa-trash-alt delete_skill" data-attr="{{skills.id}}" style="cursor: pointer;"></i>

方案2:保留JSON传参格式,修改后端取值逻辑

如果你确实需要用JSON格式传参,就需要在后端手动解析request.body中的JSON数据:

import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from .models import Job_Skillset
from django.core.exceptions import ObjectDoesNotExist

@csrf_exempt
def delete_skill(request):
    if request.method == 'POST':
        data = {}
        # 解析JSON格式的请求体
        req_data = json.loads(request.body)
        job_id = req_data.get('skill_id')
        print(job_id)
        try:
            Job_Skillset.objects.get(id=job_id).delete()
            data['status'] = 'deleted'
        except ObjectDoesNotExist:
            data['status'] = 'nodata'
        return JsonResponse(data,safe=False)

这个方案不需要改动前端AJAX代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:06:01