DataTables警告:表id = users_list-无效的JSON响应。有关此错误的更多信息,请参见http://datatables.net/tn/1

时间:2019-03-25 06:26:36

标签: php jquery datatable

我正在基于活动-非活动状态从用户表中获取数据,此后应使用数据表显示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>

1 个答案:

答案 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 -->