我正在尝试初始化一个关于Ajax成功的DataTable。它第一次工作正常,但除非我刷新页面,否则它不会再次工作。
JS函数:
this.summaryReport = function()
{
crsf = $("input[name=csrftestname]").val();
searchClients = $("#searchClients").val();
$('#loadingmessage').show();
$.ajax({
url: url+"query_report_summary",
type: "post",
cache: false,
data: {"csrftestname": crsf, searchClients: searchClients},
success: function(query_result)
{
var data = $.parseJSON(query_result);
$('#example').DataTable( {
data: data,
columns: [
{ data: "name" },
{ data: "location" },
{ data: "source" },
{ data: "contact" },
{ data: "number" },
{ data: "status" }
]
} );
self.reportSummary(data);
},
complete: function()
{
$("#reportSummaryForm")[0].reset();
$('#loadingmessage').hide();
}
});
}我收到is - DataTable警告错误-无法重新初始化DataTable。
HTML:
<form role="form" class="" id="reportSummaryForm">
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
<div class="input-group input-group-sm">
<input class="form-control input-sm" type="text" id="searchClients" name="searchClients" placeholder="">
<span class="input-group-btn">
<button type="button" class="btn btn-sm btn-primary" data-bind="click: summaryReport">Search</button>
</span>
</div>
</form>
<table id="example" class="display" width="100%"></table>发布于 2016-07-06 21:24:20
在外部作用域中预先创建dataTable:
var table = $('#example').DataTable( {
columns: [
{ data: "name" },
{ data: "location" },
{ data: "source" },
{ data: "contact" },
{ data: "number" },
{ data: "status" }
]
});在summaryReport中,对表执行clear()操作,然后逐个对新行执行add()操作。下面我还设置了dataType,所以不需要转换响应。所有操作都是在这样的假设下进行的,即您在响应中真正得到了有效的JSON,该响应以columns中指定的形式保存了一个项目数组:
$.ajax({
url: url+"query_report_summary",
type: "post",
cache: false,
data: {"csrftestname": crsf, searchClients: searchClients},
dataType: 'json',
success: function(data) {
table.clear()
data.forEach(function(row) {
table.row.add(row)
})
table.draw()
}
...
})发布于 2016-07-06 20:04:00
错误Can not reinitialize DataTable清楚地表明,已经为此元素初始化了一个数据表。
您必须在每次成功的ajax调用后销毁datatable,并将其初始化为一个新的数据表。
$('#example').DataTable( {应替换为
dtExample.destroy();
dtExample = $('#example').DataTable( {dtExample必须作为全局变量添加到您的函数之外,以便在以后执行ajax调用时能够访问它。
要避免所有这些情况,您可以查看一下示例部分here中解释的数据表的服务器端处理能力
https://stackoverflow.com/questions/38223299
复制相似问题