Datatables TypeError: c is undefined
Я пытаюсь использовать jQuery DataTables, но получаю ошибку
TypeError: c is undefined
Я не знаю, что не так с моим кодом, поскольку я вижу, что JSON правильно извлекает и находится в правильном формате, но я не знаю, что с ним не так, что я получил вышеприведенную ошибку.
Мой JSON:
{"Data":[{"LOGIN":10184},{"LOGIN":10214},{"LOGIN":10180},{"LOGIN":10187},{"LOGIN":10179},{"LOGIN":10280},{"LOGIN":201},{"LOGIN":10238},{"LOGIN":10296},{"LOGIN":10312}]}
и мой код DataTables:
$(document).ready(function() {
$('#tablename').dataTable( {
"processing": true,
"serverSide": true,
"ajax": {
"type": "POST",
"url": "https://test.com/api/db/select",
"data": function ( json ) { return JSON.stringify( { "Sql": 12 } );},
"contentType": "application/json; charset=utf-8",
"dataType": "json",
"processData": true,
beforeSend : function(xhr){
var access_token = sessionStorage.getItem('access_token');
xhr.setRequestHeader('Authorization', 'Bearer ' + access_token);
}
},
"dataSrc": "Data",
"columns": [
{ "data": "LOGIN" }
]
} );
} );
Ответы
Ответ 1
dataSrc
- это специальная опция dataTables ajax, которая должна быть включена в объект ajax:
"ajax": {
"dataSrc": "Data", //<--- place dataSrc here instead
"type": "POST",
...
}
Вы поместили его за пределы ajax, и поэтому таблицы данных не имеют представления о том, какой источник использовать (помимо слепой попытки ответа ajax) или где принадлежит LOGIN
.
Ответ 2
Проверьте, добавили ли вы
<thead></thead>
<tbody></tbody>
Я решил эту проблему, добавив их.
Таким образом, структура должна быть такой:
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
Ответ 3
Когда-то эта проблема возникает, фиксируя несогласованные/неравные столбцы с столбцами HTML и datatables.
"columns": [
null,
null,
null,
{"orderable": false, "width":"2%"},
],
Над javascript определены 4 столбца и HTML с 5 столбцами
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
<td>E</td>
</tr>
Следовательно, вам придется исправить/сопоставить обе стороны HTMl и Datatable конфигурации.
"columns": [
null,
null,
null,
null, //Added New
{"orderable": false, "width":"2%"},
],
Ответ 4
в моем случае мне пришлось удалить атрибут colspan из th внутри thead и избавиться от ошибки; (
Ответ 5
В моем случае я получил ту же ошибку, потому что я использовал функцию ajax.dataSrc(data) для управления данными. Но после этого я забыл вернуть данные.
"dataSrc": function ( json ) {
for ( var i=0, ien=json.data.length ; i<ien ; i++ ) {
//somethings...
}
return json.data;// I forgot this line, then i got the error "TypeError: c is undefined"
}
Через несколько минут я проверил документацию функции ajax.dataSrc и заметил, что у меня нет возврата:
Возвращает: массив. Массив данных, которые DataTables должен использовать для рисования таблицы
Надеюсь, у вас нет такого же отвлечения...
Ответ 6
В моем случае, отсутствует aaData в результате обратного результата.
//Javascript
$('#table').DataTable({
sAjaxSource: '/load',
aoColumns: [
...
],
});
//server side(in Rails)
render json: {'aaData'=>data}
Ответ 7
В моем случае мой интерфейс: ajax: { dataSrc: "data" }
был в порядке, но на стороне сервера я возвратил объект, где первая буква была Upper return Json(new { Data = model });