Django如何将JSON数据传递给DataTables的Ajax?加载失败求助
解决DataTables加载失败(显示Loading...)的问题
我来帮你搞定这个问题!页面一直卡在“Loading...”的核心原因是你生成的JSON格式不符合DataTables的要求——目前输出的是多个独立JSON对象直接拼接({"key":val} {"key":val}),而DataTables需要的是一个标准的JSON数组(用[]包裹,对象间用逗号分隔)。下面是具体的修复步骤:
1. 修正Django View的JSON生成逻辑
你用cursor.fetchall()拿到的是元组列表,需要先把它转换成字典列表,再序列化为正确的JSON数组。替换你View里的结果生成代码:
import json from django.http import JsonResponse def your_view_function(request): # 你的原有查询代码 cursor = connection.cursor() cursor.execute(cQuery, [cCust_nm, cDel_yn]) rows = cursor.fetchall() # 定义字段名(要和你SQL查询的字段顺序完全对应) column_names = ['cust_code', 'cust_nm', 'btnid', 'id'] # 把元组列表转成字典列表 result_data = [dict(zip(column_names, row)) for row in rows] # 用JsonResponse返回,自动处理正确的JSON格式和响应头 return JsonResponse(result_data, safe=False)
注意:
safe=False是因为我们返回的是列表而非单个字典,这是Django JsonResponse的要求。另外不要再手动用json.dumps()拼接对象,直接序列化整个列表即可。
2. 调整前端DataTables的Ajax配置
确保你的前端代码正确解析返回的JSON数组,示例如下:
<!-- 先引入jQuery和DataTables的依赖(确保路径正确) --> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.css"> <script type="text/javascript" charset="utf8" src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.js"></script> <!-- 表格容器 --> <table id="customerTable" class="display" style="width:100%"></table> <script> $(document).ready(function() { $('#customerTable').DataTable({ "ajax": { "url": "/your-view-url/", // 替换成你的Django视图路由 "dataSrc": "" // 关键:因为返回的是顶级数组,不需要嵌套的data键 }, "columns": [ {"data": "cust_code", "title": "客户编码"}, {"data": "cust_nm", "title": "客户名称"}, {"data": "btnid", "title": "按钮ID"}, {"data": "id", "title": "序号"} ] }); }); </script>
3. 排查额外问题
如果还是不行,打开浏览器的开发者工具(F12)检查:
- Network标签:查看Ajax请求的状态码是否为200,响应内容是不是标准的JSON数组(比如
[{"cust_code":"000027",...}, {"cust_code":"000028",...}])。 - Console标签:有没有JS报错,比如依赖未加载、字段名不匹配等。
- 确保Django视图没有输出额外内容(比如
print()语句、调试信息),这些会破坏JSON格式。
内容的提问来源于stack exchange,提问作者Jongpyo Jeon
相关产品推荐
相关产品推荐

