【问题标题】:DataTables warning: table id=example - Cannot reinitialise DataTable. For more information about this error, please see http://datatables.net/tn/3DataTables 警告:table id=example - 无法重新初始化 DataTable。有关此错误的更多信息,请参阅 http://datatables.net/tn/3
【发布时间】:2018-01-31 06:37:26
【问题描述】:

预期输出:

基于角色下拉选择每次需要绑定数据表网格

错误:DataTables 警告:table id=example - 无法重新初始化 DataTable。有关此错误的更多信息,请参阅http://datatables.net/tn/3

用户界面如下所示:

我的代码:

$(document).ready(function() {

  $('#RoleId').change(function() {
    var RoleId = $("#RoleId").val();
    var SetData = $("#SetRoleMapping");
    var url = "/Home/GetRoleMapplingList?RoleId=" + RoleId;
    $.ajax({
      type: "GET",
      url: url,
      success: function(data) {
        var RoleMapping = JSON.parse(data);
        for (var i = 0; i < RoleMapping.length; i++) {
          var Data = "<tr class='row_" + RoleMapping[i].Id + "'>" +
            "<td>" + RoleMapping[i].Id + "</td>" +
            "<td>" + RoleMapping[i].RoleId + "</td>" +
            "<td>" + RoleMapping[i].MenuName + "</td>" +
            "<td>" + RoleMapping[i].Active + "</td>" +
            "</tr>";
          SetData.append(Data);

        }

        var table = $('#example').DataTable({
          'paging': true,
          'lengthChange': true,
          'searching': true,
          'ordering': true,
          'info': true,
          'autoWidth': true
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="~/Content/boostrap/jquery/dist/jquery.min.js"></script>
<script src="~/Content/boostrap/datatables.net/js/jquery.dataTables.min.js"></script>

<table id="example" class="display nowrap dataTable dtr-inline">
  <thead>
    <tr>
      @*
      <th><input name="select_all" value="1" id="example-select-all" type="checkbox" /></th>*@
      <th>Id</th>
      <th>Role Id</th>
      <th>Menu Name</th>
      <th>Active</th>
    </tr>
  </thead>
  <tfoot>
    <tr>
      @*
      <th>sdfsdf</th>*@
      <th>Id</th>
      <th>Role Id</th>
      <th>Menu Name</th>
      <th>Active</th>
    </tr>
  </tfoot>
  <tbody id="SetRoleMapping"></tbody>
</table>

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:
    Updated Code:
       $('#RoleId').change(function () {
                var table;
                var RoleId = $("#RoleId").val(); 
                var SetData = $("#SetRoleMapping").empty();
                var url = "/Home/GetRoleMapplingList?RoleId=" + RoleId;
                $.ajax({    
                    type: "GET",
                    url: url,
                    success: function (data) {
                        var RoleMapping = JSON.parse(data);
                        for (var i = 0; i < RoleMapping.length; i++) {
                            var Data = "<tr class='row_" + RoleMapping[i].MenuId + "'>" +
                                "<td><input type='checkbox' class='chkRow' " + RoleMapping[i].IsActive + " id='chkid1'></td>" +
                                 "<td>" + RoleMapping[i].MenuId + "</td>" +
                                    "<td>" + RoleMapping[i].RoleId + "</td>" +
                                "<td>" + RoleMapping[i].MenuName + "</td>" +                            
                                "</tr>";
                            SetData.append(Data);
    
                        }
                        table.destroy();
                        table = $('#example').DataTable({
                            'destroy': true,
                            'paging': true,
                            'lengthChange': true,
                            'searching': true,
                            'ordering': true,
                            'info': true,
                            'autoWidth': true                            
                    }
    
            });     
    

    【讨论】:

      【解决方案2】:

      您应该在代码开头将table 对象声明为全局对象:

      var table;
      

      那么你应该在创建一个新实例之前销毁table 的实例:

      table.destroy();
      

      那么你应该在创建DataTable对象时添加destroy属性:

      table = $('#example').DataTable({
        'destroy': true,
        'paging': true,
        'lengthChange': true,
        'searching': true,
        'ordering': true,
        'info': true,
        'autoWidth': true
      });
      

      【讨论】:

      • 您好,谢谢您的回复。我完成了上述更改,但未引用数据表。
      • $('#RoleId').change(function () { var table; var RoleId = $("#RoleId").val(); var SetData = $("#SetRoleMapping") .empty(); var url = "/Home/GetRoleMapplingList?RoleId=" + RoleId; $.ajax({ type: "GET", url: url, success: function (data) {
      • var RoleMapping = JSON.parse(data); for (var i = 0; i " + "" + "" + RoleMapping[i].MenuId + "" + "" + RoleMapping[i].RoleId + "" +
      • table.destroy(); table = $('#example').DataTable({ 'destroy': true, 'paging': true, 'lengthChange': true }); table.ajax.reload();
      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多