jquery DataTable 无法读取 JSON 数据

Posted

技术标签:

【中文标题】jquery DataTable 无法读取 JSON 数据【英文标题】:jquery DataTable cant read JSON data 【发布时间】:2018-12-27 07:47:46 【问题描述】:

我的 JSON 包含字符串和整数值。 html 表列与 DataTable 列匹配。 DataTables 数据正在通过 ajax 加载。一切似乎都很好,但我收到错误

DataTables warning: table id=blackListMailTable - Requested unknown parameter 'Id' for row 0, column 0. For more information about this error, please see http://datatables.net/tn/4  

HTML:

<div class="col-lg-12">
    <h3>All Black List Mails</h3>
    <hr />
    <br />
    <table id="blackListMailTable" class="table table-bordered table-hover">
        <thead>
            <tr>
                <th>ID</th>
                <th>Email</th>
                <th>Module</th>
                <th>Status</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>
</div>  

数据表代码:

//making the table
var table;
if ($.fn.dataTable.isDataTable('#blackListMailTable')) 
    table.ajax.reload();

else 
    table = $("#blackListMailTable").DataTable(
        ajax: 
            url: ".....",
            method: "GET",
            dataSrc: ""
            //success: function (data) 
            //    console.log(data);
            //,
        ,
        columns: [
             data: "Id" ,
             data: "Email" ,
             data: "Module" ,
             data: "Status" 
        ]
    );
  

我使用 ajax 调用的成功选项测试了 JSON 数据。在浏览器控制台中我得到了这个 JSON:

[  
     
      "Id":1,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Unsubscribed"
   ,
     
      "Id":2,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Unsubscribed"
   ,
     
      "Id":3,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Unsubscribed"
   ,
     
      "Id":4,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Unsubscribed"
   ,
     
      "Id":5,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Unsubscribed"
   ,
     
      "Id":6,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Unsubscribed"
   ,
     
      "Id":7,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Bounced"
   ,
     
      "Id":10002,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Bounced"
   ,
     
      "Id":10003,
      "Email":"***",
      "Module":"MailChimp",
      "Status":"Unsubscribed"
   
]  

我尝试使用mData,但没有运气。我做错了什么?

【问题讨论】:

jsonResponse 中是否有任何列值为空白? 【参考方案1】:

试试这个可能有些字段没有数据

columns: [
             data: "Id",defaultContent: '' ,
             data: "Email",defaultContent: '' ,
             data: "Module",defaultContent: '' ,
             data: "Status",defaultContent: '' 
        ];

否则删除

dataSrc:""

【讨论】:

【参考方案2】:

如果您的 jsonResponse 包含一些 null 或空白值,那么您可以将 defaultContent 添加到您的 columns。类似于mysql的默认值。

 table = $("#blackListMailTable").DataTable(
        ajax: 
            url: ".....",
            method: "GET",
            dataSrc: ""
            //success: function (data) 
            //    console.log(data);
            //,
        ,
        columns: [
             data: "Id" , defaultContent: "" ,
             data: "Email", defaultContent: "" ,
             data: "Module", defaultContent: "" ,
             data: "Status", defaultContent: "" 
        ]
    );

我可以看到的另一个问题是: 正如你使用的那样

if ($.fn.dataTable.isDataTable('#blackListMailTable')) 
    table.ajax.reload();

这个函数检查

如果#blackListMailTable 是一个数据表。 "如果是,初始化:"

所以,它会抛出重新初始化错误。解决在您的 if 中添加 ! 而不是条件的问题。

if (!$.fn.dataTable.isDataTable('#blackListMailTable')) 
   table.ajax.reload();

意思是:

如果#blackListMailTable 是一个数据表。 "如果没有,初始化:

【讨论】:

以上是关于jquery DataTable 无法读取 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取 JQuery DataTable 未定义的属性“mData”

在使用 jquery 数据表时无法读取未定义的属性“样式”

我想使用 jQuery DataTable 但我收到错误

jQuery DataTables 错误 - TypeError:无法读取未定义的属性“fnInit”

错误:通过 ajax jquery 加载数据时无法读取未定义的属性“样式”

无法重新初始化 JQuery DataTable