Я хочу получить информацию из базы данных и показать ее на вкладке с таблицами данных и JQuery на CodeIngniter 3. Моя таблица на мой взгляд:
<table id = "myTable" class = "display" style = "width:100%">
<thead>
<tr>
<th>Name</th>
<th>Last_name</th>
</tr>
</thead>
</table>
Мой скрипт js:
$(document).ready(function(){
$('#myTable').DataTable( {
"processing": true,
"serverSide": true,
"order":[],
"ajax": {
"url": '<?= base_url('main/getData');?>',
"type": "POST",
"data": { '<?php echo $csrf_token_name; ?>' : '<?php echo $csrf_token_hash; ?>' }
},
});
})
Мой метод контроллера:
public function getData()
{
$this->security->get_csrf_token_name();
$this->security->get_csrf_hash();
$table = $this->main_model->data();
if (count($table) > 0)
{
foreach ($table as $row)
{
$tab = array();
$tab["name"] = $row->name;
$tab["last_name"] = $row->last_name;
$r_tab[] = $tab;
}
echo json_encode($r_tab);
}
Большое спасибо :)
В чем проблема вашего нынешнего подхода?






Вы должны добавить опцию columns в свой код данных, чтобы удаленные данные отображались правильно.
$(document).ready(function(){
$('#myTable').DataTable( {
"processing": true,
"serverSide": false,
"order":[],
"ajax": {
"url": '<?php echo site_url('main/getData'); ?>',
"type": "POST",
"data": { '<?php echo $csrf_token_name; ?>' : '<?php echo $csrf_token_hash; ?>' }
},
'columns': [
{ "data": "name", "name": "name"},
{ "data": "last_name", "name": "last_name"},
]
});
});
В методе вашего контроллера ваш ответ JSON структурирован неправильно. Вам нужно добавить свои записи в элемент data вашего выходного массива.
Обновленный метод контроллера:
public function getData()
{
$data['csrf_token_name'] = $this->security->get_csrf_token_name(); // $data has to be passed as second parameter of $this->load->view(..., ....),
$data['csrf_token_hash'] = $this->security->get_csrf_hash();
$table = $this->main_model->data();
if (count($table) > 0)
{
foreach ($table as $row)
{
$tab = array();
$tab["name"] = $row->name;
$tab["last_name"] = $row->last_name;
$r_tab[] = $tab;
}
$output = array(
"data" => $r_tab
);
echo json_encode($output);
}
Также можно ли опубликовать весь код getData (..)? Вы можете вставить его, если хотите.
HTML
<table id = "myTable" class = "display" style = "width:100%">
<thead>
<tr>
<th>Name</th>
<th>Last_name</th>
</tr>
</thead>
</table>
JQuery
$('#user_table').DataTable( {
"ajax": {
"url": '<?php echo site_url('main/getData'); ?>',
"type": "POST",
"data": { '<?php echo $csrf_token_name; ?>' : '<?php echo $csrf_token_hash; ?>' }
},
} );
Контроллер
public function getData()
{
$this->security->get_csrf_token_name();
$this->security->get_csrf_hash();
$this->datatables->select('*')
->from('table_name')
echo $this->datatables->generate();
}
Это отдельный файл JS или файл внутри файла PHP просмотра? Кстати, не используйте короткие теги. Используйте
<?php echo(причину можно найти на сайте PHP). Также эта строка должна выглядеть так:"url": "<?php echo base_url('main/getData');?>",. У вас есть проблема с экранированием кавычек / интерполяцией значений здесь.