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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:08:41