Предупреждение DataTables: запрошенный неизвестный параметр '0' из источника данных для строки '0'
Кто-нибудь, пожалуйста, знайте, что не так с очень простым HTML файлом ниже?
![enter image description here]()
Я просто пытаюсь использовать массив объектов в качестве источника данных для DataTables:
tests.html:
<html>
<head>
<link type="text/css" rel="stylesheet" href="#" onclick="location.href='https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css'; return false;">
<link type="text/css" rel="stylesheet" href="#" onclick="location.href='https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/css/jquery.dataTables_themeroller.css'; return false;">
<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>
UPDATE: Хорошо, у меня есть ответ от автора для использования более новой версии DataTables или переименования mData в mDataProp
Ответы
Ответ 1
Вы используете массив объектов. Можете ли вы использовать вместо этого двумерный массив?
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 с объектами
Этот jsfiddle http://jsfiddle.net/j2C7j/ использует массив объектов. Чтобы не получить ошибку, мне пришлось заполнить ее тремя пустыми значениями - я знаю, что это меньше, чем оптимально. Вы можете найти лучший способ с помощью 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
Для параметра null или undefined значение. Просто добавьте эту строку в атрибуты: ,"columnDefs": [ { "defaultContent": "-", "targets": "_all" } ]
Пример:
oTable = $("#bigtable").dataTable({
"columnDefs": [{
"defaultContent": "-",
"targets": "_all"
}]
});
Ответ 3
Это мучило меня больше часа.
Если вы используете параметр dataSrc и столбец defs, убедитесь, что они находятся в правильных местах. В настройках ajax я вложил определения столбцов и потерял слишком много времени, чтобы понять это.
Это хорошо:
![good]()
Это не хорошо:
![enter image description here]()
Тонкая разница, но достаточно реальная, чтобы вызвать выпадение волос.
Ответ 4
У меня была такая же проблема. Оказывается, в моем случае я пропустил запятую после последней колонки. 30 минут моей жизни впустую, я никогда не вернусь!
![enter image description here]()
Ответ 5
Убедитесь, что имена столбцов совпадают. Они чувствительны к регистру. Здесь, в моем случае, я получил эту ошибку, когда имена столбцов моей модели находятся в зашифрованном виде, и я использовал все строчные буквы в данных запроса 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 дублирует второе имя столбца для проверки.
Ответ 6
На веб-сайте DataTables:
Каждая ячейка в DataTables запрашивает данные и когда DataTables пытается получить данные для ячейки и не может этого сделать, это вызовет предупреждая, что данные недоступны там, где ожидалось быть. Предупреждающее сообщение:
Предупреждение DataTables: таблица id = {id}
- запрошенный неизвестный параметр '{parameter}
' для строки {row-index}
где:
{id}
заменяется идентификатором DOM таблицы, который вызвал ошибку
{parameter}
- это имя параметра данных. DataTables запрашивает
{row-index}
- индекс внутренней строки DataTables для rwo, вызвавший ошибку.
Итак, чтобы разбить его, DataTables запросил данные для данной строки, {parameter}
, и там нет данных, или это null
или undefined
.
Дополнительную информацию см. в техническом примечании на веб-сайте DataTables.
Ответ 7
Я столкнулся с этой проблемой, потому что я испортил 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
поэтому я изменил его на
....
else return row.LetterStatusID.toString();// messed return keyword added
.....
Ответ 8
Это очень распространенный случай в 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.
Ответ 9
Если вы используете knockout.bindings.dataTables.js
вы можете отредактировать файл и заменить эту строку
dataTable.fnAddData(unwrappedItems);
с
if (unwrappedItems.length > 0) {
dataTable.fnAddData(unwrappedItems);
}
Это помогло мне, и я надеюсь, что поможет вам.
Ответ 10
В моем странном сценарии у меня был другой столбец, который не всегда возвращал значение в функции "render". return null
решил мою проблему.
Ответ 11
Если кто-то использует новые DataTables (что удивительно), и вы хотите использовать массив объектов, вы можете легко сделать это с помощью опции столбцов. Обратитесь к следующей ссылке для превосходного примера по этому вопросу.
DataTables с массивом объектов
Я боролся с этим в течение прошлых 2 дней, и это решило это. Я не хотел переключаться на многомерные массивы по другим причинам кода, поэтому искал такое решение.
Ответ 12
В моем случае у меня была заглавная буква "C" для опций столбцов в настройках данных. Потрачено 2 часа, чтобы понять это !!!!
"ajax": {
"url": "URL",
"type": "GET",
"contentType": "application/json",
"data": function (d) {
return {
id: Id
};
},
"dataSrc": ""
},
"columns": [
{
data: 'field1'
},
{
data: 'field2'
}
],
"columnDefs": [{
"targets": [-1, -2],
"orderable": false
},
{
"defaultContent": "-",
"targets": "_all"
}],
"order": [[0, "asc"]]