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

Ajax GET请求调用Django视图时无法获取传递的参数值如何解决?

问题根因

  • GET请求的参数是拼接在URL后的查询字符串,不会被封装到request.data中,request.data仅用于读取POST、PUT等携带请求体的请求参数。
  • Django REST Framework 中GET请求参数需要从request.query_params中读取,等价于Django原生的request.GET对象,直接从request.data取参数会触发KeyError,导致服务端返回500错误。

修复方案

1. 修改Django视图代码

将取值逻辑修改为从query_params读取,建议用get方法设置默认值避免参数缺失时再次报错:

@csrf_exempt
@api_view(['GET', 'POST', 'PUT', 'DELETE'])
@permission_classes([IsAuthenticated])
@authentication_classes([TokenAuthentication])
def employee_list(request):

    if request.method == 'GET':
        # 仅需修改这一行取值逻辑
        data_ = request.query_params.get('designation', '')
        print(data_)
        # 后续可按需用拿到的参数过滤查询集,示例:
        # employees = Employee.objects.filter(designation=data_)
        employees = Employee.objects.all()
        students = Student.objects.all()
        user = MyUser.objects.all()
        serializer = EmployeeSerializer(employees, many=True)
        serialized_sudents = StudentSerializer(students, many=True)
        multi = {
            'employees': serializer.data,
            'students': serialized_sudents.data
        }
        # serializer2 = UserSerializer(user, many=True)
        return JsonResponse(multi, safe=False)

2. 前端AJAX可选优化(非必须,仅冗余清理)

GET请求没有请求体,不需要设置contentType: "application/json",可删除该冗余配置:

$(document).ready(function () {
    $(".call_ajax").click(function () {
      $.ajax({
        url: "/employee_list",
        type: "GET",
        // 删掉冗余的contentType配置即可
        dataType: "json",
        data: {
          designation: "soft eng",
        },
        headers: {
          "X-CSRFToken": csrftoken,
          Authorization: my_token,
        },
        success: function (data) {
          console.log(data);
        },
        error: function (xhr) {
          //Do Something to handle error
          console.log(xhr.error);
        },
      });
    });

验证

修改完成后前端发起请求时,参数会自动拼接为http://127.0.0.1:8000/employee_list?designation=soft+eng,后端可正常读取参数完成后续查询逻辑。

内容的提问来源于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.12 01:24:02