sql >> Databáze >  >> RDS >> Mysql

DataTable s Ajaxem nefunguje dobře po použití serverSide:true

Datatables posílají vše, co potřebujete – když se podíváte do své konzole pod sítí, uvidíte, že k odesílání těchto požadavků na server používají metodu ajax-get

GET Parametry jsou následující

draw
columns
start
length
search

což znamená - musíte svůj model správně přizpůsobit...

něco takového by mělo fungovat

public function all_user_request($task_id) 
{
    $intStart = intval($this->input->get("start"));
    $intLength = intval($this->input->get("length"));
    $strSearch = (strlen($this->input->get("search")["value"]) >= 2) ?   $this->input->get("search",true)["value"]    :   false;
    $order = $this->input->get("order",true);


    $this->setQuery($task_id,$strSearch);

    $query = $this->db->get();
    $this->recordsTotal = $query->num_rows();

    $this->setQuery($task_id, $strSearch);

    if ($intStart >= 0 && $intLength > 0)
    {
        $this->db->limit($intLength,$intStart);
    }

    $strOrderField = 'username';
    $strDirection = "ASC";
    if (is_array($order))
    {
        switch($order[0]['column'])
        {
            case 1:
                $strOrderField = 'type';
                break;
            case 2:
                $strOrderField = 'request';
                break;

        }
        if (!empty($order[0]['dir']))    $strDirection = $order[0]['dir'];
    }
    $this->db->order_by($strOrderField,$strDirection);


    $query = $this->db->get();

    $arrData = $query->result();

    return $arrData;

}

public function getRecordsTotal()
{
    return $this->recordsTotal;
}

private function setQuery($task_id, $strSearch="")
{
    $this->db
        ->select('*')
        ->from('user_request')
        ->where('task_id', $task_id);

    if (!empty($strSearch))
    {
        $this->db->like('task_id', $strSearch);
    }

}

a váš ovladač

//controller
$task = $this->input->post('task', TRUE);
$user_request = $this->model->all_user_request($task);

$data = [];
foreach ($user_request as $ur)
{
    $data[] = [
        $ur->username,
        $ur->type,
        $ur->request
    ];
}

$arrCompiledData = [
    'data' => $data,
    'draw' => $this->input->get('draw'),
    'recordsTotal' => $this->model->getRecordsTotal(),
    'recordsFiltered' => $this->model->getRecordsTotal(),
];

$this->output
    ->set_content_type('application/json')
    ->set_output(json_encode($arrCompiledData));

Prosím, mějte na paměti, že jsem to právě napsal - možná jsou tam nějaké překlepy, ale měli byste být schopni porozumět tomu, jak by zpracování požadavku datatables na straně serveru mělo fungovat.



  1. Přidejte předponu k automatickému přírůstku v mysql db

  2. Jak procházet polem vstupů ve formuláři?

  3. Přerozdělte hlasy a zároveň vyřaďte kandidáty

  4. Filtrované indexy a vynucená parametrizace (redux)