JavaScript
Вы установили для ServerSide
значение true, когда вызываете DataTable()
.Но вы уже создали таблицу.Измените это:
$('#display_userinfo').DataTable({
"processing": true, //Optional, only useful for *large* tables
//"serverSide": true, //REMOVE THIS
});
Из документации:
По умолчанию DataTables работает в режиме обработки на стороне клиента, но может быть переключен в режим обработки на стороне сервера с помощью этой опции.Обработка на стороне сервера полезна при работе с большими наборами данных (обычно> 50 000 записей), поскольку она означает, что ядро базы данных можно использовать для выполнения сортировки и вычислений - операций, для которых современные движки баз данных высоко оптимизированы, что позволяет использовать DataTablesс массивными наборами данных (миллионы строк).
Вы должны использовать ServerSide
, только если планируете кормить DataTable()
JSON.В противном случае вы можете просто запустить DataTable()
без флага ServerSide
, и он переведет ваш HTML-код в его формат.
Если вы перенастроили свой бэкэнд, вы все равно можете использовать ServerSide
, но это может и не понадобиться.Вот пример для начала работы:
$('#display_userinfo').dataTable( {
"serverSide": true, //Here it's necessary
"ajax": {
"url": '<?php echo SITE_URL . 'ajax/users_list'; ?>',
"data": {}
}
});
HTML
Вы также допустили небольшую ошибку разметки, которая может повлиять или не повлиять на DataTables,Измените следующее:
<tbody> <!-- This needs to be BEFORE the foreach() loop -->
<?php foreach ($users as $user) { ?>
<tr>
<td><?= $user->id ?></td>
<td><?= $user->name ?></td>
<td><?= $user->mobile ?></td>
</tr>
<?php } ?>
</tbody> <!-- Correctly placed *AFTER* the foreach() loop -->