Таблицы данных: невозможно прочитать длину свойства undefined
Я понимаю, что это популярная проблема, и я прочитал все подобные вопросы здесь, на Qaru и других сайтах (включая веб-сайт datatables).
Чтобы уточнить, я использую
- PHP Codeigniter
- Materliazecss
Я также удостоверился, что я получил массив JSON правильно:
[{"name_en":"hello","phone":"55555555"},{"name_en":"hi","phone":"00000000"}]
Моя HTML-таблица выглядит так:
<table id="customer_table">
<thead>
<tr>
<th>Name</th>
<th>Phone</th>
</tr>
</thead>
</table>
А вот моя функция document.ready
:
$(document).ready(function(){
//$('#customer_table').DataTable();
$('#customer_table').DataTable( {
"ajax": 'json',
"dataSrc": "",
"columns": [
{ "data": "email" },
{ "data": "name_en" }
]
});
});
Я получаю ошибку
Uncaught TypeError: Невозможно прочитать свойство 'length' из неопределенного
Ответы
Ответ 1
ОК, спасибо всем за помощь.
Однако проблема была намного проще, чем это.
Все, что мне нужно сделать, это исправить мой JSON, чтобы присвоить массив атрибуту с именем data, как показано ниже.
{
"data": [{
"name_en": "hello",
"phone": "55555555",
"email": "a.shouman",
"facebook": "https:\/\/www.facebook.com"
}, ...]
}
Ответ 2
Это еще проще: просто используйте dataSrc:''
в определении ajax, чтобы dataTable знал, что следует ожидать массива вместо объекта:
$('#pos-table2').DataTable({
processing: true,
serverSide: true,
ajax:{url:"pos.json",dataSrc:""}
}
);
Посмотреть параметры ajax
Ответ 3
Попробуйте следующим образом: возврат должен быть d, а не d.data
ajax: {
"url": "xx/xxx/xxx",
"type": "GET",
"error": function (e) {
},
"dataSrc": function (d) {
return d
}
},
Ответ 4
ПРИЧИНА
Эта ошибка TypeError: Cannot read property 'length' of undefined
удается TypeError: Cannot read property 'length' of undefined
обычно означает, что jQuery DataTables не может найти данные в ответе на запрос Ajax.
По умолчанию jQuery DataTables ожидает, что данные будут в одном из форматов, показанных ниже. Ошибка возникает из-за того, что данные возвращаются в формате, отличном от формата по умолчанию.
Массив массивов
{
"data": [
[
"Tiger Nixon",
"System Architect",
"$320,800",
"2011/04/25",
"Edinburgh",
"5421"
]
]
}
Массив объектов
{
"data": [
{
"name": "Tiger Nixon",
"position": "System Architect",
"salary": "$320,800",
"start_date": "2011/04/25",
"office": "Edinburgh",
"extn": "5421"
}
]
}
РЕШЕНИЕ
Используйте формат по умолчанию или используйте параметр ajax.dataSrc
чтобы определить свойство данных, содержащих данные таблицы, в ответе Ajax (data
по умолчанию).
См. Расположение массива данных для получения дополнительной информации.
ССЫЛКИ
Посмотрите jQuery DataTables: Распространенные ошибки консоли JavaScript для получения дополнительной информации.
Ответ 5
Когда у вас есть данные JSON, появляется следующая ошибка
![enter image description here]()
Лучшим решением является назначение var data
для локального объекта json array,
подробности см.: https://datatables.net/manual/tech-notes/4
Это поможет вам отображать содержимое таблицы.
$(document).ready(function(){
$('#customer_table').DataTable( {
"aaData": data,
"aoColumns": [{
"mDataProp": "name_en"
}, {
"mDataProp": "phone"
}, {
"mDataProp": "email"
}, {
"mDataProp": "facebook"
}]
});
});
Ответ 6
В моем случае мне пришлось назначить my json атрибуту aaDatastrong > , как в Datatables
пример ajax, данные которого выглядели
this.
Ответ 7
Если вы используете ajax в качестве функции, помните, что он ожидает, что ему будут возвращены данные JSON с установленными параметрами.
$('#example').dataTable({
"ajax" : function (data, callback, settings) {
callback({
data: [...],
recordsTotal: 40,
recordsFiltered: 40}
));
}
})
Ответ 8
Хотя приведенные выше ответы хорошо описывают ситуацию, при устранении неполадок проверьте также, что браузер действительно получает формат, ожидаемый DataTables. Там могут быть другие причины, чтобы не получить data
. Например, если пользователь не имеет доступа к URL-адресу данных, а вместо этого получает HTML-код. Или удаленная система имеет некоторые неудачные исправления на месте. Вкладка "Сеть" в браузере "Отладка" помогает.
Ответ 9
вы можете попробовать проверить свои поля, поскольку вы отображаете поле электронной почты, которое недоступно в вашем ajax
$.ajax({
url: "url",
type: 'GET',
success: function(data) {
var new_data = {
"data": data
};
console.log(new_data);
}
});