DataTable com Ajax não está funcionando bem após o uso serverSide: true
Eu tenho uma tabela de usuário usando DataTables, que conterá mais de 200 linhas. Parece tão bom quando estou usando DataTables por padrão, o"pageLength": 10
, e este é o exemplo da tabela.
Username | Type | Request |
user01 1 request01
user02 1 request02
user03 2 request03
user04 1 request04
user05 1 request05
user06 1 request06
user07 1 request07
user08 1 request08
user09 1 request09
user10 1 request10
Showing 1 to 10 of 200 entries
PrimeiroAnterior123...20PróximoÚltimo
Então, para reduzir o tempo de carregamento, eu decido usar"processing": true
e"serverSide": true
. Então eu tive algum problema com isso"serverSide" : true
, É imprimir 200 linhas de dados na tabela.
Showing 0 to 0 of 0 entries (filtered from NaN total entries)
$12Primeiro13$
$14Primeiro15$
Estou usando o CodeIgniter, aqui está o meu código:
No meuVisualizações + Js :
<select name="task" id="task">
<option value="1">Task 1</option>
<option value="2">Task 2</option>
</select>
<table id="user-request" class="table">
<thead>
<tr>
<th>Username</th>
<th>Type</th>
<th>Request</th>
</tr>
</thead>
</table>
<script>
... on task change ...
... var task = $("#task").val(); ...
$('#user-request').DataTable({
'processing': true,
'serverSide': true,
'ajax': {
'type': 'POST',
'url': base_url+'user/get_user_request',
'data': {"task":task,"csrf_token":$("input[name=csrf_token]").val()}
}
})
</script>
Nota : Task é um grupo diferente, por exemplo, Classe 1 ou Classe 2, Orchard University ou Harvard University
No meuControlador :
$task = $this->input->post('task', TRUE);
$user_request = $this->model->all_user_request(task);
foreach ($user_request as $ur)
{
$arr = array();
$arr[] = $ur->username;
$arr[] = $ur->type;
$arr[] = $ur->request;
$data[] = $arr;
}
$output = array(
"data" => $data
);
if (COUNT($output) > 0)
{
echo json_encode($output);
}
No meuModelo :
public function all_user_request($task_id) {
$query = "SELECT * FROM user_request WHERE task_id = ?";
return $this->db->query($query, $task_id)->result();
}
Nota : No modelo está realmente usando 2INNER JOIN
, Estou apenas simplificando a seleção apenas para perguntar aqui. (transformando-se em tabela de desnormalização apenas aqui).
Eu estava tentando adicionardraw
, recordsTotal
, recordsFiltered
para$output
no meu controlador apenas usando dados numéricos. Exemplo
$output = array(
"draw" => 5,
"recordsTotal" => 5,
"recordsFiltered" => 5,
"data" => $data
);
if (COUNT($output) > 0)
{
echo json_encode($output);
}
Eu estava procurando a resposta, mas acho que o problema está aqui, mas ainda não tenho ideia de onde devo obter odraw
- recordsTotal
- recordsFiltered
dados. Eu vejo em outra resposta de outras pessoas, elas usam"draw" => $_POST['draw']
, então eu tentei, e não faz nada.
Então, eu estou tentando isso usando dados numéricos, mas o resultado ainda é o mesmo. eu preciso de ajuda com isto. Ainda imprime 200 linhas de dados na tabela.
Showing 0 to 0 of 0 entries (filtered from NaN total entries)
$35Primeiro36$