繁体   English   中英

如何将 Ajax 加载的 JSON 数组从 Django/Python 视图加载到 DataTable

[英]How to load an Ajax loaded array of JSON from Django/Python view into DataTable

我是新开发人员,这是我的第一个专业项目,也是 Django 的第一个项目。 我正在尝试将从 view.py 中的 models.py 获取的数据加载到 DataTable 中。 这是我的代码。
这是我的意见.py

def recordingDataTable(request):
    if request.is_ajax and request.method == "GET":
        vicidial_agent_log = VicidialAgentLog.objects.filter(event_time__gte='2021-04-16 16:00:00').values('user', 'server_ip')
        structure = json.dumps(list(vicidial_agent_log), cls=DjangoJSONEncoder)
        
        return JsonResponse(structure, status = 200, safe=False)
    
    return JsonResponse({}, status = 400)

这是返回的 JSON

"[{\"user\": \"8045\", \"server_ip\": \"168.119.48.158\"}, {\"user\": \"8047\", \"server_ip\": \"168.119.48.158\"},]"

这是我的模板

<table id="recording_datatable" class="table table-striped table-bordered" style="width:100%">
    <thead>
        <tr>
            <th>Username</th>
            <th>Server IP</th>
        </tr>
    </thead>
    <tbody>
    
    </tbody>
    
    <tfoot>
        <tr>
            <th>Username</th>
            <th>Server IP</th>
        </tr>
    </tfoot>

</table>

最后,这是我的脚本

$(document).ready(function() {
    $.ajax({
        'url': "{% url 'recordings:recordingDataTable' %}",
        'method': "GET",
        'dataType': "JSON",
        'contentType': 'application/json',
        
    }).done( function(data) {
        alert(data);
        
        $('#recording_datatable').DataTable({
            data: data,
            dataSrc: "",
            columns: [
                { data: "user" },
                { data: "server_ip" },
            ]
                
        });

    })
});

每当我运行我的代码时,我都会收到以下错误:
DataTables 警告:表 id=recording_datatable - 请求第 0 行第 0 列的未知参数“用户”。有关此错误的更多信息。
我之前已经从 PHP 实现了一个 DataTable 并且似乎做的一切都是正确的。 我只是不知道为什么它不起作用。 我已经访问了这里的几乎所有文档,Stackoverflow 和 Datatables.net,由于某种原因,似乎没有任何实现有效。

我知道这将是一个简单的错误,但这个问题已经花费了我 3 天的大部分时间。 任何帮助将不胜感激。 谢谢你。

感谢@andrewjames 的帮助,我找到了解决方案。 我传递的是字符串而不是 JSON 响应。 也许是菜鸟的错误。

我在 views.py 文件中使用了 json.dumps() ,因为我想在将 object 传递给 jsonResponse() 之前对其进行序列化,但这是错误的实现。 首先,我通过const parsedData = JSON.parse(data); 我的数据填充了数据表。 一旦我意识到我的错误,我最终编辑了我的 views.py 文件以发送 jsonResponse() 并按以下方式进行。

def recordingDataTable(request):

    if request.is_ajax and request.method == "GET":
        vicidial_agent_log = VicidialAgentLog.objects.filter(event_time__gte='2021-04-16 16:00:00').values('user', 'server_ip')
        return JsonResponse(list(vicidial_agent_log), status = 200, safe=False)
    return JsonResponse({}, status = 400)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM