(Сообщение обновлено в соответствии с полученной мною справкой)
Я пытаюсь, чтобы моя таблица данных jQuery динамически заполнялась через Ajax (и th, и td).
Для этого я неукоснительно следую сценарию jsfiddle , который я нашел здесь и который, кажется, работает.
Разница в том, что человек, который написал этоСценарий просто жестко запрограммировал свою переменную «dataSet» перед использованием, в то время как мне нужно автоматически сгенерировать ее из php, а затем проанализировать в jQuery.
Когда я пытаюсь это сделать, все, что я получаю, это:
TypeError: e is not an Object. (evaluating '"length"in e').
Тем временем ислам очень помог мне в чате, и похоже, что форматирование и console.log (dataSet) теперь в порядке.
Вот моя (обновленная) попытка:
HTML:
<table id="example"></table>
PHP:
<?php
$dataset=array();
....
while($row = mysqli_fetch_assoc($sql)) {
.....
$array_tmp = array();
$array_tmp["Header1"] = $alias;
$array_tmp["Header2"] = $chambres;
$array_tmp["Header3"] = $adresse;
$dataset[] = $array_tmp;
}
....
echo json_encode($dataset, JSON_UNESCAPED_UNICODE);
?>
jQuery:
var my_columns = [];
var dataSet =[];
$.ajax({
type: "GET",
url: "myfile.php",
data: 'value=1',
datatype:'json',
cache: false,
success: function(response){
dataSet=response;
$.each( dataSet[0], function( key, value ) {
var my_item = {};
my_item.data = key;
my_item.title = key;
my_columns.push(my_item);
});
}
});
ислам jsFiddled код с некоторыми из моихпроизводственные данные, и это работает, но я все еще получаю сообщение об ошибке на моей стороне.Итак, это действительно загадка.
То, что я показываю вам здесь, это именно то, что у меня есть.Так что нет ничего другого, что меняет игру.
Я использую те же jQuery и dataTables, что и в Исламе jsFiddled .Оба установлены и работают, так как я успешно использую dataTables, за исключением этой конкретной попытки получения данных с сервера.Я не использую никакой другой библиотеки.
, когда я "console.log (dataSet)" на моей стороне, вот что я получаю (что, кажется, хорошо):
[
{
"Header1" : "tyurtyu",
"Header2" : "zertzert",
"Header3" : 123
},
{
"Header1" : "sdfsdfsd" ,
"Header2" : "dsfgsdfg",
"Header3" : 456
}
]
FYI,вот закомментированный вызов dataTables, который я еще не использую, потому что я уже получаю сообщение об ошибке при вызове Ajax.По крайней мере, он покажет, где мой массив dataSet должен использоваться впоследствии.
/*
var dataTable = $('#example').DataTable({
'bInfo' : false,
'paging' : false,
'scrollX': false,
'processing':false,
'sDom' : 'ltipr',
'data' : dataSet,
"columns": my_columns
});
*/
Если я раскомментирую этот вызов dataTable, я получу еще одно сообщение об ошибке поверх другого:
TypeError: e is not an Object. (evaluating '"length"in e')
TypeError: undefined is not an object (evaluating 'e[i].aDataSort')
Буду признателен за любую помощь.
ОБНОВЛЕНИЕ: Я избавился от первого сообщения об ошибке, изменив способ перехода от «ответа» к «dataSet», например так:
success: function(response){
dataSet = JSON.parse(response);
//instead of "dataSet=response;"
$.each(dataSet[0], function(key, value) {
...
});
}
Итак, теперь у меня появляется только второе сообщение об ошибке при попытке передать dataSet в dataTable.
Кажется, что это просто проблема области действия как console.log (dataSet) вне вызова ajax, как показано ниже, ничего не выводится
var my_columns = [];
var dataSet =[];
$.ajax({
type: "GET",
url: "php/ajax/get_table_values.php",
data: 'value1=1',
datatype:'json',
cache: false,
success: function(response){
dataSet = JSON.parse(response);
//instead of "dataSet=response;"
$.each(dataSet[0], function(key, value) {
var my_item = {};
my_item.data = key;
my_item.title = key;
my_columns.push(my_item);
});
}
});
console.log(dataSet);
var dataTable = $('#example').DataTable({
'bInfo' : false,
'paging' : false,
'scrollX': false,
'processing':false,
'sDom' : 'ltipr',
'data' : dataSet,
"columns": my_columns
});
ОБНОВЛЕНИЕ: проблема решена, см. мой другой пост ниже.Спасибо всем!