Подтвердить что ты не робот

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" }
        ]
    } );
} );
4b9b3361

Ответ 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 });