我正在基于活动-非活动状态从用户表中获取数据,此后应使用数据表显示foreach循环数据,但会出现错误
DataTables警告:表格ID = users_list-无效的JSON响应
所以我的要求是
1) Show all data in the data table
2) per page 5 records
3) Default search box of a data table
4) Pagination of a data table
以下是我的代码,但这对我不起作用 在index.php文件下拉列表中,并基于onchange事件,ajax调用ajax控制器中的users_list方法。
In index.php file drop-down list with ajax call request
<select class="custom-select" onchange="get_users(this.value)">
<option value="active">Active</option>
<option value="inactive">Inactive</option>
</select>
<div class="show_data"></div>
<script>
function get_users(status){
$.ajax({
type:'POST',
url:'<?php echo SITE_URL . 'ajax/users_list'; ?>',
data:{ status:status},
success: function(data)
{
$(".show_data").html(data);
},
error: function (jqXHR, textStatus, errorThrown)
{
alert('Failed');
}
});
}
</script>
在控制器Ajax.php中
function users_list(){
$status=$this->input->post('status'); //active or inactive
$data['users']=$this->db->where('status',$status)->get('users')->result();
$this->load->view('view_assets',$data);
}
在view_assets.php文件中
<table id="display_userinfo">
<thead>
<tr class="bg-light">
<th>user id</th>
<th>user name</th>
<th>Mobile no</th>
</tr>
</thead>
<?php foreach ($users as $user) { ?>
<tbody>
<tr>
<td><?= $user->id ?></td>
<td><?= $user->name ?></td>
<td><?= $user->mobile ?></td>
</tr>
<?php } ?>
</tbody>
<script>
$('#display_userinfo').DataTable({
"processing": true,
"serverSide": true,
});
</script>
答案 0 :(得分:1)
JavaScript
调用DataTable()
时,已将ServerSide
设置为true。但是您已经创建了表格。更改此:
$('#display_userinfo').DataTable({
"processing": true, //Optional, only useful for *large* tables
//"serverSide": true, //REMOVE THIS
});
从他们的文档中
默认情况下,DataTables在客户端处理模式下运行,但可以使用此选项切换到服务器端处理模式。服务器端处理在处理大型数据集(通常> 50'000条记录)时很有用,因为这意味着可以使用数据库引擎执行排序等计算-高度优化了现代数据库引擎的操作,从而允许使用DataTables具有大量数据集(数百万行)。
如果您打算提供DataTable()
JSON,则仅应使用ServerSide
。否则,您可以不带ServerSide
标志就运行DataTable()
,它将把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 -->