求助:CodeIgniter视图实现DataTables JSON及解决_DT_CellIndex错误
嘿,这两个问题我都碰到过,给你详细说说怎么解决!
1. 在CodeIgniter中为DataTables生成JSON数据
其实严格来讲,DataTables需要的JSON数据一般是由CodeIgniter的控制器来生成输出的(视图主要负责渲染HTML页面),这样前端的DataTables才能通过AJAX请求获取数据。我给你捋一遍完整流程:
步骤1:控制器中编写数据接口
在你的控制器里新建一个方法,用来查询数据并整理成DataTables要求的格式(包含draw、recordsTotal、recordsFiltered、data这几个核心字段),然后输出JSON:
public function get_siswa_data() { // 获取DataTables发送的分页、绘制参数 $draw = $this->input->get('draw'); $start = $this->input->get('start'); $length = $this->input->get('length'); // 查询总记录数(用于分页统计) $total_records = $this->db->count_all('siswa'); // 查询分页数据 $siswa_list = $this->db->limit($length, $start)->get('siswa')->result(); // 提前处理班级名称(避免在视图里重复调用函数) foreach ($siswa_list as $item) { $item->kelas = getKelas($item->id_kelas); } // 整理成DataTables要求的输出格式 $output = [ 'draw' => intval($draw), 'recordsTotal' => $total_records, 'recordsFiltered' => $total_records, // 如果没有搜索功能,直接等于总记录数 'data' => $siswa_list ]; // 设置响应头并输出JSON $this->output ->set_content_type('application/json') ->set_output(json_encode($output)); }
步骤2:视图中初始化DataTables
在你的HTML视图里,初始化DataTables并指定AJAX请求地址为上面的控制器方法:
<table id="siswaTable" class="display" style="width:100%"> <thead> <tr> <th>ID Siswa</th> <th>Kelas</th> <th>Nama</th> <th>Alamat</th> </tr> </thead> <tbody></tbody> </table> <script> $(document).ready(function() { $('#siswaTable').DataTable({ processing: true, serverSide: true, ajax: '<?= site_url("你的控制器名/get_siswa_data") ?>', columns: [ { data: 'id_siswa' }, { data: 'kelas' }, { data: 'nama' }, { data: 'alamat' } ] }); }); </script>
2. 解决
Uncaught TypeError: Cannot set property '_DT_CellIndex' of undefined错误 看你贴的视图代码,问题非常明显:<tbody>标签下面多了一个空的<tr>标签!这个空行里没有任何<td>单元格,DataTables在初始化遍历表格行的时候,找不到该行对应的单元格元素,就会抛出这个错误。
修正后的视图代码
把那个多余的<tr>删掉,同时确保每行的<td>数量和表头的<th>数量一致:
<tbody> <?php $dataSiswa = json_decode($dataSiswa); if($semuaSiswa > 0){ foreach ($dataSiswa as $myData) { $id_siswa = $myData->id_siswa; $kelas = getKelas($myData->id_kelas); $nama = $myData->nama; $alamat = $myData->alamat; ?> <tr> <td><?=$id_siswa;?></td> <td><?=$kelas;?></td> <td><?=$nama;?></td> <td><?=$alamat;?></td> </tr> <?php } } else { // 没有数据时显示提示行 ?> <tr> <td colspan="4">暂无学生数据</td> </tr> <?php } ?> </tbody>
另外还要检查表头的<th>数量和每行的<td>数量是否完全匹配,这也是触发类似错误的常见原因。
内容的提问来源于stack exchange,提问作者bayoe
相关产品推荐
相关产品推荐

