jQuery DataTables“表中没有可用数据”

Posted

技术标签:

【中文标题】jQuery DataTables“表中没有可用数据”【英文标题】:jQuery DataTables "No Data Available in Table" 【发布时间】:2015-12-27 10:19:47 【问题描述】:

我有一张在$( document ).ready 函数中创建的表格。我也在使用 jQuery DataTables 插件。出于某种原因,当页面加载时,表格会加载,但第一行显示“表格中没有可用数据”。

html

<head>
<link rel="stylesheet" type="text/css" href="/path/to/css/jquery.dataTables.css"> 
<script type="text/javascript" charset="utf8" src="/path/to/js/jquery.dataTables.js"></script>
</head>

<div class="col-sm-12" id="ovs-sum">
<table class="table table-striped" id="summary-table">
    <thead>
        <tr>
            <th>Order</th>
            <th>Planner</th>
            <th>Vendor</th>
            <th>SKU</th>
            <th>Description</th>
            <th>Quantity</th>
            <th>PO Date</th>
            <th>PO Tracking</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>
</div>

JS/jQuery (scripts.js)

$ ( document ).ready(function() 
    $.ajax(
        type: 'GET',
        url: 'models/summary.php',
        mimeType: 'json',
        success: function(data) 
            $.each(data, function(i, data) 
                var body = "<tr>";
                body    += "<td>" + data.name + "</td>";
                body    += "<td>" + data.address + "</td>";
                body    += "<td>" + data.phone_no + "</td>";
                body    += "<td>" + data.birthday + "</td>";
                body    += "<td>" + data.color + "</td>";
                body    += "<td>" + data.car + "</td>";
                body    += "<td>" + data.hobbies + "</td>";
                body    += "<td>" + data.relatives + "</td>";
                body    += "</tr>";
                $( body ).appendTo( $( "tbody" ) );
            );
        ,
        error: function() 
            alert('Fail!');
        
    );

    /*DataTables instantiation.*/
    $( "#summary-table" ).DataTable();

此外,如果我单击列标题上的排序箭头,我的所有数据都会消失,只剩下列标题和“表中没有可用数据”。

IE、Chrome 和 FireFox 中存在此问题。到目前为止,这是我尝试过的:

-我尝试在我的 AJAX 调用之前放置 $( "#summary-table" ).DataTable();。那没用。

-我试图用 $("tbody").append(body);` 替换 $( body ).appendTo( $( "tbody" ) );。那没用。

-我用谷歌搜索。许多有此问题的 SO 问题和其他站点都有与不良表结构相关的解决方案,但我找不到我的表结构出错的地方。查看检查元素,它有我附加的行,以及 DataTables 生成的一堆 HTML。控制台中没有错误。

如何让 DataTables 处理我当前的数据?我忽略了哪些潜在错误?

【问题讨论】:

【参考方案1】:

请在将 AJAX 加载的表格附加到正文后尝试启动 dataTable。

$ ( document ).ready(function() 
$.ajax(
    type: 'GET',
    url: 'models/summary.php',
    mimeType: 'json',
    success: function(data) 
        $.each(data, function(i, data) 
            var body = "<tr>";
            body    += "<td>" + data.name + "</td>";
            body    += "<td>" + data.address + "</td>";
            body    += "<td>" + data.phone_no + "</td>";
            body    += "<td>" + data.birthday + "</td>";
            body    += "<td>" + data.color + "</td>";
            body    += "<td>" + data.car + "</td>";
            body    += "<td>" + data.hobbies + "</td>";
            body    += "<td>" + data.relatives + "</td>";
            body    += "</tr>";
            $( "#summary-table tbody" ).append(body);
        );
        /*DataTables instantiation.*/
        $( "#summary-table" ).DataTable();
    ,
    error: function() 
        alert('Fail!');
    
);
);

希望,这会有所帮助!

【讨论】:

完美!为什么呢?请指出我可以阅读的方向,了解为什么会这样?很棒的解决方案! Abhjeet,您能否解释一下它是如何/为什么起作用的。 datatables.net 上的所有示例都没有这样的结构。谢谢! 这是有效的,因为在DataTables 插件被初始化之前,它需要一个充满数据的表才能存在于 DOM 中。同样适用于其他 JS 插件。在 DOM 上的任何选择器上启动插件之前,该选择器必须存在并带有正确的数据。还有另一种使用DataTables 的方法,即使用来自DataTables 插件的服务器端请求。当您有大量数据要填充表格时,这种方式将是您唯一的选择。供您参考:Server-side calls @Abhijeet K 完美解决方案【参考方案2】:

通过 AJAX 将数据加载到 DataTable 时,只需使用 here 中记录的 DataTable row.add() API。

在您的 AJAX 响应中(假设您启动了一个名为 myTable 的 DataTable):

$.each(data, function(i, data) 
    myTable.row.add([data.name, data.address,...]);
);

myTable.draw();

我发现这种方法更简单,因为我不必构建 html - 我可以将一组数据传递给我的 DataTable 对象的 row.add() 方法。

【讨论】:

以上是关于jQuery DataTables“表中没有可用数据”的主要内容,如果未能解决你的问题,请参考以下文章

jquery.dataTables--插件使用方法

jQuery DataTables 仅过滤特定列

JQuery插件之Jquery.datatables.js用法及api

jquery之DataTables的使用

jquery-datatables-rails。响应式扩展和移动视图

JQuery插件datatables相关api