数据表服务器端实现



我尝试实现数据表服务器端,因为我有一个非常大的表,它不能像数据表通常那样返回,但我有一个问题,我不明白发生了什么,因为它不起作用:

视图:

<table id="deposits" class="table table-bordered table-striped">
<thead>
<tr>
<th>Id</th>
<th>Sucursal</th>
</tr>
</thead>
</table>

.JS:

$("#deposits").DataTable({
"paging": true,
"lengthChange": true,
"searching": true,
"ordering": true,
"info": true,
"autoWidth": true,
'responsive': true,
"processing": true,
"serverSide": true,
"ajax":{
url :"<?php echo base_url(); ?>deposit/data", // json datasource
type: "post",  // method  , by default get
error: function(data) {  // error handling
console.log(data);
}
},
"columns": [
{ "data": "id" },
{ "data": "branch_name" },
],
"columnDefs": [
{
"targets": [ 1 ],
"visible": false,
"searchable": false
},
{
"targets": [ 2 ],
"visible": false
}
],
"language": {
"sProcessing":     "Procesando...",
"sLengthMenu":     "Mostrar _MENU_ registros",
"sZeroRecords":    "No se encontraron resultados",
"sEmptyTable":     "Ningún dato disponible en esta tabla",
"sInfo":           "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
"sInfoEmpty":      "Mostrando registros del 0 al 0 de un total de 0 registros",
"sInfoFiltered":   "(filtrado de un total de _MAX_ registros)",
"sInfoPostFix":    "",
"sSearch":         "Buscar: ",
"sUrl":            "",
"sInfoThousands":  ",",
"sLoadingRecords": "Cargando...",
"oPaginate": {
"sFirst":    "Primero",
"sLast":     "Último",
"sNext":     "Siguiente",
"sPrevious": "Anterior"
},
"oAria": {
"sSortAscending":  ": Activar para ordenar la columna de manera ascendente",
"sSortDescending": ": Activar para ordenar la columna de manera descendente"
},
},
"order": [[ 8, "desc" ]],
});

控制器:

public function data()
{
$data = array(
'id_user' => $this->session->userdata('id_user'),
'activity_type' => 4,
);
$this->activity_model->store($data);
$id_status = $this->uri->segment(2);
if($this->session->userdata('id_user_type') == 4)
{
$data = array(
'id_supervisor' => $this->session->userdata('id_user'),
'id_status' => $id_status,
'start' => $this->input->post('start'),
'length' => $this->input->post('length'),
);
$result = $this->deposit_model->getDataTableDeposits($data);
}
else
{
if($id_status != "")
{
$data = array(
'id_status' => $id_status,
'start' => $this->input->post('start'),
'length' => $this->input->post('length'),
);
}
else
{
$data = array(
'start' => $this->input->post('start'),
'length' => $this->input->post('length'),
);
}
$result = $this->deposit_model->getDataTableDeposits($data);
}
$data = $result['data'];
$recordsTotal = $result['numDataTotal'];
for ($i = 0; $i < $recordsTotal; $i++) {
$array = array();
$array['id_deposit'] = $data[$i]['id_deposit'];
$array['branch_office'] = $data[$i]['branch_office'];
$new_data[] = $array;
}
$recordsFiltered = $recordsTotal;
$json_data = array(
"draw"            => intval($this->input->post('draw')),
"recordsTotal"    => intval($recordsTotal),
"recordsFiltered" => intval($recordsFiltered),
"data"            => $new_data
);
echo json_encode($json_data);
}

型:

function getDataTableDeposits($data = NULL)
{
$this->db->select('deposits.*, branch_offices.*, statuses.*, DATE_FORMAT(deposits.date,"%d/%m/%Y") AS date,  DATE_FORMAT(deposits.collection_date,"%d/%m/%Y") AS collection_date');
$this->db->from('deposits, branch_offices, statuses');
$this->db->where("deposits.id_branch_office = branch_offices.id_branch_office");
$this->db->where("deposits.id_status = statuses.id_status");
$this->db->limit($data['start'], $data['length']);
if(isset($data['id_status']))
{
$this->db->where("deposits.id_status != 7");
}
else
{
$this->db->where("deposits.id_status = 7");
}
$this->db->order_by("deposits.date", "desc");
if(isset($data['id_supervisor'])) 
{
$this->db->where("deposits.id_supervisor = '".$data['id_supervisor']."'");
}  
$query = $this->db->get();
$return = array(
'numDataTotal' => $query->num_rows(),
'data' => $query->result_array()
);
return $return;
}

但问题是它没有返回任何东西,它只是保持空白,它只显示标题 Id 和 Sucursal 但没有数据。

能是什么? 因为我已经学习了一些课程,但我真的不明白我还需要什么......

谢谢。

这将对你有所帮助 几天前我还使用服务器端实现了数据表 我最小化了排序部分以节省资源并使查询更快、更简单

HTML 和 JS 部分

<table class="table table-hover table-bordered table-bordered" id='neodatatable' style="border:none;">
<thead>
<tr>
<th class="tableheaddata">Trainee ID</th>
<th class="tableheaddata">Trainee Name</th>
<th class="tableheaddata">Father Name</th>
<th class="tableheaddata">DOB</th>
<th class="tableheaddata">Address</th>
<th class="tableheaddata">Document No</th>
<th class="tableheaddata">DPR</th>
<th class="tableheaddata">Center</th>
<th class="tableheaddata">Sub Center</th>
<th class="tableheaddata">Course</th>
</tr>
</thead><tfoot>
<tr>
<th class="tableheaddata">Trainee ID</th>
<th class="tableheaddata">Trainee Name</th>
<th class="tableheaddata">Father Name</th>
<th class="tableheaddata">DOB</th>
<th class="tableheaddata">Address</th>
<th class="tableheaddata">Document No</th>
<th class="tableheaddata">DPR</th>
<th class="tableheaddata">Center</th>
<th class="tableheaddata">Sub Center</th>
<th class="tableheaddata">Course</th>
</tr>
</tfoot>
</table>

<script type="text/javascript">
$(document).ready(function () {

$('#neodatatable').DataTable({
"ordering": false,
"processing": true,
"serverSide": true,
"ajax": {
url: '<?=base_url();?>others/data_view/traineeview',
type: 'POST'
},
columnDefs: [
{ targets: [0, 1], orderable: false},
]
});
});
</script>

服务器端部分我正在控制器中做所有

事情
parent::__construct();
/* Useful $_POST Variables coming from the plugin */
$this->draw = $this->input->post('draw');//$_POST["draw"];//counter used by DataTables to ensure that the Ajax returns from server-side processing requests are drawn in sequence by DataTables
// $orderByColumnIndex  =  $this->input->post('order')[0]['column'];// index of the sorting column (0 index based - i.e. 0 is the first record)
//$orderBy =  $this->input->post('columns')[$orderByColumnIndex]['data'];//Get name of the sorting column from its index
// $orderType =  $this->input->post('order')[0]['dir']; // ASC or DESC
$this->start  = $this->input->post('start');//$_POST["start"];//Paging first record indicator.
$this->length = $this->input->post('length');//$_POST['length'];//Number of records that the table can display in the current draw
$this->search = $this->input->post('search');

}
function traineeview(){
$recordsTotal=$this->db->order_by('id','DESC')->count_all_results('fddi_trainee_registration');


$this->db->limit($this->length,$this->start);
if(!empty($this->search['value'])){
$this->db->group_start();
$this->db->or_like('aadhar',$this->search['value']);
$this->db->or_like('t_first_name',$this->search['value']);
$this->db->or_like('t_last_name',$this->search['value']);
$this->db->or_like('t_middle_name',$this->search['value']);
$this->db->or_like('fddi_trainee_registration.id',$this->search['value']);
$this->db->group_end();

$getlists=$this->db->order_by('id','DESC')->get_where('fddi_trainee_registration',array());
$recordsFiltered = $getlists->num_rows();
}else{

$getlists=$this->db->order_by('id','DESC')->get_where('fddi_trainee_registration',array());
$recordsFiltered = $recordsTotal;
}

$data=array();
foreach($getlists->result() as $rowdata){

$data[]= array(
$rowdata->id,$rowdata->t_first_name.' '.$rowdata->t_middle_name.' '.$rowdata->t_last_name,$rowdata->f_first_name.' '.$rowdata->f_middle_name.' '.$rowdata->f_last_name,formateDate($rowdata->dob),$rowdata->address,$rowdata->aadhar,$dpr,$center,$subcenter,$course);

}
$response = array(
"draw" => intval($this->draw),
"recordsTotal" => $recordsTotal,
"recordsFiltered" => $recordsFiltered,
"data" => $data
);
echo json_encode($response);
}

对于任何清除评论

相关内容

  • 没有找到相关文章

最新更新