sql >> Database >  >> RDS >> Mysql

DataTable met Ajax werkt niet goed na gebruik serverSide:true

Datatables sturen alles wat je nodig hebt - als je in je console onder netwerk kijkt, zul je zien dat ze de ajax-get-methode gebruiken om die verzoeken naar de server te sturen

De GET Parameters zijn als volgt

draw
columns
start
length
search

wat betekent - je moet je model goed aanpassen...

zoiets zou moeten werken

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);
    }

}

en je controller

//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));

Houd er rekening mee dat ik dit zojuist heb opgeschreven - misschien zijn er wat typefouten, maar je zou moeten kunnen begrijpen hoe de serverside-verwerking van een datatables-verzoek zou moeten werken.



  1. Wat is de beste manier om een ​​json-string te coderen/decoderen?

  2. Waarom is CONCAT() niet standaard ingesteld op de standaardtekenset in MySQL?

  3. MariaDB uitvoeren in een hybride cloudconfiguratie

  4. Snelste manier om te bepalen of een record bestaat