我有一个用
$( 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 问题和其他有此问题的站点都有与坏表结构相关的解决方案,但我找不到我的表结构出错的地方。查看 inspect 元素,它有我附加的行,以及 DataTables 生成的一堆 HTML。控制台中没有错误。
如何让 DataTables 与我当前的数据一起工作?我忽略了哪些潜在错误?
请在您的 AJAX 加载表附加到正文后尝试启动数据表。
$ ( 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!');
}
});
});
希望,这会有所帮助!
当通过 AJAX 将数据加载到 DataTable 时,只需使用 DataTable row.add() API,如此处所述。
在您的 AJAX 响应中(假设您启动了一个名为 myTable 的数据表):
$.each(data, function(i, data) {
myTable.row.add([data.name, data.address,...]);
});
myTable.draw();
我发现这种方法更简单,因为我不必构建 html - 我只需将一组数据传递到我的 DataTable 对象上的 row.add() 方法。
我是新用户,所以还没有50个声望。只想补充一点,holly_whitney 的答案非常有效。实际上,API 文档为您提供了所需的一切。这是更简单和更清晰的代码。