DataTables предупреждение: запрошен неизвестный параметр ' 0 'из источника данных для строки '0'
кто-нибудь знает, что не так с очень простым файлом HTML ниже?
Я просто пытаюсь использовать массив объектов в качестве источника данных для таблицы данных:
тесты.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
11 ответов:
вы используете массив объектов. Вы можете использовать двумерный массив?
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/ использует массив объектов. Чтобы не получить ошибку, мне пришлось заполнить ее 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 или значение undefined ошибка, просто добавьте эту строку в атрибуты:
,"columnDefs": [ { "defaultContent": "-", "targets": "_all" } ]
пример :
oTable = $("#bigtable").dataTable({ "columnDefs": [{ "defaultContent": "-", "targets": "_all" }] });
окно предупреждения не будет отображаться снова, любые пустые значения будут заменены на то, что вы указали.
это мучило меня больше часа.
Если вы используете параметр dataSrc и параметр defs столбца, убедитесь, что они находятся в правильных местах. Я вложил столбец defs в настройки ajax и потерял слишком много времени, выясняя это.
Это хорошо:
Это нехорошо:
тонкая разница, но достаточно реальная, чтобы вызвать выпадение волос.
У меня была та же проблема. Оказывается, в моем случае я пропустил запятую после последней колонки. 30 минут моей жизни впустую я никогда не вернусь!
убедитесь, что имена столбцов совпадают. Они чувствительны к регистру. Здесь, в моем случае, я получил эту ошибку, когда имена столбцов моей модели указаны с большой буквы, и я использовал все строчные буквы в данных запроса 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; } }
поэтому здесь, в моем случае,я заполняю datatable столбцами(Name,Name, Id).. IAM дублирует имя второго столбца для тестирования.
С сайта DataTables:
каждая ячейка в DataTables запрашивает данные, и когда DataTables пытается получите данные для ячейки и не сможете этого сделать, это вызовет предупреждение, сообщая вам, что данные не доступны там, где это ожидалось быть. Предупреждающее сообщение:
DataTables предупреждение: таблица id=
{id}
- просил неизвестный параметр -{parameter}
на строку{row-index}
где:
{id}
заменен с идентификатором DOM таблицы, которая вызвала ошибку
{parameter}
это имя параметра данных DataTables запрашивает
{row-index}
- это внутренний индекс строки DataTables для rwo, который вызвал ошибку.поэтому, чтобы разбить его, DataTables запросил данные для данной строки, of элемент
{parameter}
и там нет данных, или этоnull
илиundefined
.посмотреть этот tech Примечание на веб-сайте DataTables для получения дополнительной информации.
я столкнулся с этой проблемой, потому что я перепутал
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
theReturn keyword
наelse clause
поэтому я изменил его, чтобы
.... else return row.LetterStatusID.toString();// messed return keyword added .....
Это очень распространенный случай в DataTables, когда он не может найти поле запроса define в конфигурации 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 подавит предупреждение.
Примечание: это свойство может быть изменено в зависимости от версии используемых таблиц данных.
в моем странном сценарии, у меня был разные столбец, который не всегда возвращает значение в функции 'render'.
return null
решить мою проблему.
Если вы используете
knockout.bindings.dataTables.js
затем вы можете отредактировать файл и заменить эту строкуdataTable.fnAddData(unwrappedItems);
С
if (unwrappedItems.length > 0) { dataTable.fnAddData(unwrappedItems); }
это помогло мне, и я надеюсь, что поможет вам.
Если кто-то использует новые объекты DataTable (который является удивительным, кстати) и хотите использовать массив объектов, то вы можете сделать это легко с помощью опции столбцов. Обратитесь к следующей ссылке для отличным примером этого.
Таблицы данных с массивом объектов
Я боролся с этим в течение последних 2 дней, и это решило его. Я не хотел переключаться на многомерные массивы по другим причинам кода, поэтому искал такое решение.