有人请知道,下面这个非常简单的HTML文件出了什么问题?
我只是想使用an array of objects作为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>
更新:好的,我得到了作者的答案to use a newer version of DataTables or rename mData to mDataProp
答案 0 :(得分:65)
对于 null 或 未定义的值 错误,只需将此行添加到属性:,"columnDefs": [ { "defaultContent": "-", "targets": "_all" } ]
示例:
oTable = $("#bigtable").dataTable({
"columnDefs": [{
"defaultContent": "-",
"targets": "_all"
}]
});
&#13;
警告框不会再次显示,任何空值都将替换为您指定的值。
答案 1 :(得分:24)
您正在使用一组对象。你可以使用二维数组吗?
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",[]]
];
编辑以包含对象数组
这个问题有一个可能的解决方案:jQuery DataTables fnrender with objects
这个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 } }
]
});
});
答案 2 :(得分:10)
这困扰了我一个多小时。
如果您正在使用dataSrc选项和列defs选项,请确保它们位于正确的位置。我在ajax设置中嵌套了列defs并且丢失了太多时间来计算出来。
这很好:
这不好:
微妙的差异,但真实到足以导致脱发。
答案 3 :(得分:6)
我遇到了同样的问题。事实证明,在最后一栏之后,我错过了逗号。浪费了30分钟,我永远不会回来!
答案 4 :(得分:4)
确保列名相同。它们区分大小写。在我的情况下,当我的模型的列名称是大写的时,我得到了这个错误,并且我在ajax请求的数据中使用了所有小写字母。
因此,我通过匹配列名称与现有模型名称完全相同来解决。
DataTable绑定
$("#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用数据列填充数据表(Name,Name,Id).. iam复制第二列名称进行测试。
答案 5 :(得分:2)
来自DataTables网站:
DataTables中的每个单元格都会请求数据,以及DataTables尝试的时间 获取单元格的数据并且无法执行此操作,它将触发a 警告,告诉您数据在预期的位置不可用 成为。警告信息是:
DataTables警告:table id =
{id}
- 请求的未知参数 &#39;{parameter}
&#39;对于行{row-index}
其中:
{id}
将替换为触发错误的表的DOM ID
{parameter}
是DataTables请求的数据参数的名称
{row-index}
是触发错误的rwo的DataTables内部行索引。因此,为了将其分解,DataTables已经请求了给定行的数据 提供的
{parameter}
并且没有数据,或者是null
或undefined
。
有关详情,请参阅DataTables网站上的tech note。
答案 6 :(得分:2)
我遇到这个问题,因为我在return keyword
custom rendering
Columns section
中混淆了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
},
......
}
messed
我的代码中的问题是因为我Return keyword
中的else clause
<{1}}
所以我把它改成了
....
else return row.LetterStatusID.toString();// messed return keyword added
.....
答案 7 :(得分:2)
当DataTables无法在DataTable配置中找到请求字段时,这是一个非常常见的情况。
例如:
"aoColumns": [{
mData: 'mobile', sWidth: "149px;"
}, {
mData: 'name', sWidth: "121px;"
}, {
mData: 'productName', sWidth: "116px;"
}
}];
这里,如果DataTable没有收到上述属性。它会产生这个警告:
DataTables警告:从'0'行的数据源请求未知参数'0'
要解决此问题,您只需在“aoColumns”中设置默认值
即可例如:
"aoColumns": [{
mData: 'mobile',sDefaultContent : '',sWidth: "149px;"
}, {
mData: 'name',sDefaultContent : '', sWidth: "121px;"
}, {
mData: 'productName',sDefaultContent : '', sWidth: "116px;"
}
}];
sDefaultContent 会压制警告。
注意:可以根据您使用的dataTables版本更改此属性。
答案 8 :(得分:1)
如果您使用knockout.bindings.dataTables.js
,则可以编辑该文件并替换此行
dataTable.fnAddData(unwrappedItems);
带
if (unwrappedItems.length > 0) {
dataTable.fnAddData(unwrappedItems);
}
这对我很有帮助,我希望能帮到你。
答案 9 :(得分:1)
在我奇怪的场景中,我有一个不同的列,它并不总是在'render'函数中返回一个值。 return null
解决了我的问题。
答案 10 :(得分:1)
如果有人正在使用新的DataTables(这是非常棒的btw)并且想要使用对象数组,那么您可以使用columns选项轻松完成。请参阅以下链接以获得一个很好的例子。
DataTables with Array of Objects
过去两天我一直在努力解决这个问题。我不想因其他代码原因切换到多维数组,所以正在寻找这样的解决方案。