首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTable警告-无法重新连接DataTable

DataTable警告-无法重新连接DataTable
EN

Stack Overflow用户
提问于 2016-07-06 19:50:02
回答 2查看 75关注 0票数 0

我正在尝试初始化一个关于Ajax成功的DataTable。它第一次工作正常,但除非我刷新页面,否则它不会再次工作。

JS函数:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2016-07-06 21:24:20

在外部作用域中预先创建dataTable:

代码语言:javascript
复制
var table = $('#example').DataTable( {
  columns: [
    { data: "name" },
    { data: "location" },
    { data: "source" },
    { data: "contact" },
    { data: "number" },
    { data: "status" }
  ]
});

在summaryReport中,对表执行clear()操作,然后逐个对新行执行add()操作。下面我还设置了dataType,所以不需要转换响应。所有操作都是在这样的假设下进行的,即您在响应中真正得到了有效的JSON,该响应以columns中指定的形式保存了一个项目数组:

代码语言:javascript
复制
$.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()
  }
  ...
})
票数 1
EN

Stack Overflow用户

发布于 2016-07-06 20:04:00

错误Can not reinitialize DataTable清楚地表明,已经为此元素初始化了一个数据表。

您必须在每次成功的ajax调用后销毁datatable,并将其初始化为一个新的数据表。

代码语言:javascript
复制
$('#example').DataTable( {

应替换为

代码语言:javascript
复制
dtExample.destroy();
dtExample = $('#example').DataTable( {

dtExample必须作为全局变量添加到您的函数之外,以便在以后执行ajax调用时能够访问它。

要避免所有这些情况,您可以查看一下示例部分here中解释的数据表的服务器端处理能力

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38223299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档