DataTables警告:请求来自数据源的未知参数“0”,用于行“0”

请问有谁知道,下面这个非常简单的HTML文件有什么问题?

在这里输入图像说明

我只是试图使用一个对象数组作为DataTables的数据源:

tests.html:

<html> <head> <link type="text/css" rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css"> <link type="text/css" rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/css/jquery.dataTables_themeroller.css"> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script> <script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/jquery.dataTables.min.js"></script> <script type="text/javascript"> var data = [ {"Name":"UpdateBootProfile","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]}, {"Name":"NRB Boot","Result":"PASS","ExecutionTime":"00:00:50.5000000","Measurement":[{"TestName":"TOTAL_TURN_ON_TIME","Result":"PASS","Value":"50.5","LowerLimit":"NaN","UpperLimit":"NaN","ComparisonType":"nctLOG","Units":"SECONDS"}]}, {"Name":"NvMgrCommit","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]}, {"Name":"SyncNvToEFS","Result":"PASS","ExecutionTime":"00:00:01.2500000","Measurement":[]} ]; $(function() { var testsTable = $('#tests').dataTable({ bJQueryUI: true, aaData: data, aoColumns: [ { mData: 'Name' }, { mData: 'Result' }, { mData: 'ExecutionTime' } ] }); }); </script> </head> <body> <table id="tests"> <thead> <tr> <th>Name</th> <th>Result</th> <th>ExecutionTime</th> </tr> </thead> <tbody> </tbody> </table> </body> </html> 

更新:好吧,我已经从作者的答案使用更新版本的DataTables或重命名mData到mDataProp

你正在使用一个对象数组。 你可以使用二维数组吗?

http://www.datatables.net/examples/data_sources/js_array.html

看到这个jsfiddle: http : //jsfiddle.net/QhYse/

我用这样的数组,它工作正常:

 var data = [ ["UpdateBootProfile","PASS","00:00:00",[]] , ["NRB Boot","PASS","00:00:50.5000000",[{"TestName":"TOTAL_TURN_ON_TIME","Result":"PASS","Value":"50.5","LowerLimit":"NaN","UpperLimit":"NaN","ComparisonType":"nctLOG","Units":"SECONDS"}]] , ["NvMgrCommit","PASS","00:00:00",[]] , ["SyncNvToEFS","PASS","00:00:01.2500000",[]] ]; 

编辑以包含对象数组

这个问题有一个可能的解决scheme: jQuery的DataTables fnrender与对象

这个jsfiddle http://jsfiddle.net/j2C7j/使用一个对象数组。; 为了不发生错误,我必须填充3个空白值 – 我知道不是最佳的。 你可能会发现一个更好的方式与fnRender,请张贴如果你这样做。

 var data = [ ["","","", {"Name":"UpdateBootProfile","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]} ] ]; $(function() { var testsTable = $('#tests').dataTable({ bJQueryUI: true, aaData: data, aoColumns: [ { mData: 'Name', "fnRender": function( oObj ) { return oObj.aData[3].Name}}, { mData: 'Result' ,"fnRender": function( oObj ) { return oObj.aData[3].Result }}, { mData: 'ExecutionTime',"fnRender": function( oObj ) { return oObj.aData[3].ExecutionTime } } ] }); }); 

对于null未定义的值错误,只需将此行添加到attributes: ,"columnDefs": [ { "defaultContent": "-", "targets": "_all" } ]

例如:

 oTable = $("#bigtable").dataTable({ "columnDefs": [{ "defaultContent": "-", "targets": "_all" }] }); 

我遇到了同样的问题。 在我的情况下,最后一列之后我错过了逗号。 我浪费了30分钟,我永远不会回来!

在这里输入图像说明

从DataTables网站:

DataTables中的每个单元格都会请求数据,当DataTables试图获取单元格的数据并且无法这样做时,它会触发警告,告诉您数据在预期的位置不可用。 警告消息是:

DataTables警告:表id = {id} – 为{row-index}请求未知参数' {parameter} '

哪里:

{id}被触发错误的表的DOM IDreplace

{parameter}是DataTables正在请求的数据参数的名称

{row-index}是触发错误的rwo的DataTables内部行索引。

所以要分解它,DataTables已经请求了给定行的数据, {parameter}提供的数据,那里没有数据,或者是nullundefined

有关更多信息,请参阅DataTables网站上的技术说明 。

我面对这个问题,因为我在Columns section custom rendering中使用了return keyword

 columns: [ {.... 'data': function(row, type, val, meta) { if (row.LetterStatus) return '@CultureHelper.GetCurrentCulture()' == 'ar'? row.LetterStatus.NameInArabic: row.LetterStatus.NameInEnglish; else row.LetterStatusID.toString();// here is the problem because I messed the Return key keyword }, ...... } 

我的代码中的问题是因为我在else clause messedReturn keyword

所以我改变了

 .... else return row.LetterStatusID.toString();// messed return keyword added ..... 

确保列名是相同的。 他们是区分大小写的。 在这里,在我的情况下,当我的模型的列名使用大写时,我得到了这个错误,并且我在ajax请求的数据中使用了所有的小写字母。

所以,我通过匹配列名完全相同的方式来解决现有的模型名称。

数据表绑定

 $("#Customers").DataTable({ ajax: { url: "/api/customers/", dataSrc: "" }, columns: [ { data: "Name", render: function (data, type, customer) { return "<a href='/customers/edit/" + customer.Id + "'>" + customer.Name + "</a>"; } }, { data: "Name" }, { data: "Id", render: function (data) { return "<button class='btn-link js-delete' data-customer-id=" + data + ">Delete</button>"; } } ] }); 

Web API方法:

  public IEnumerable<Customer> GetCustomers() { return _context.Customers.ToList(); } 

我的模特: –

  public class Customer { public int Id { get; set; } [Required] [StringLength(255)] public string Name { get; set; } [Display(Name="Date Of Birth")] public DateTime? BirthDate { get; set; } public bool isSubscribedToNewsLetter { get; set; } public MembershipType MembershipType { get; set; } [Display(Name="Membership Type")] [Required] public byte MembershipTypeId { get; set; } } 

所以在这里我的情况下,IAM填充与列(名称,名称,ID)数据表… IAM复制第二列名称来testing。

这困扰了我一个多小时。

如果您使用的是dataSrc选项和列defs选项,请确保它们位于正确的位置。 我已经在ajax设置中嵌套了列defs,并且花费了太多的时间来弄清楚。

这很好:

好

不是很好:

在这里输入图像说明

微妙的差异,但真正足以造成脱发。

如果您使用的是knockout.bindings.dataTables.js,那么您可以编辑该文件并replace此行

dataTable.fnAddData(unwrappedItems);

if (unwrappedItems.length > 0) { dataTable.fnAddData(unwrappedItems); }

这有助于我,我希望能帮助你。