Предупреждение DataTables: недопустимый ответ JSON, если в таблице нет записей. Также добавлен пустой массив, но записи не отображаются - PullRequest
0 голосов
/ 06 июня 2019

Я использую CodeIgniter с таблицей данных начальной загрузки для отображения записей из базы данных.

Я получаю сообщение об ошибке, когда в таблице нет доступных записей.

Предупреждение DataTables: таблица id = employee-List - Неверный ответ JSON. Для получения дополнительной информации об этой ошибке, пожалуйста, см. http://datatables.net/tn/1

Записи отображаются, когда они доступны в таблице.

( Примечание : если я добавил в модель пустой массив, равный 0, то моя ошибка исчезнет, ​​но записи не будут отображаться в базе данных.)

Я пытался найти решение для SO, но ни одно из решений не работает для меня. Может кто-нибудь помочь мне в чем проблема с моим кодом?

enter image description here

Мой код,

Сценарий

$('#employee-List').DataTable({
  language: {
    sLengthMenu: "Show _MENU_", // remove entries text
    searchPlaceholder: "Search",
    emptyTable: "No record found",
    search: ""
  },
  "ordering": false, // remove sorting effect from header 
  "processing": true,
  "serverSide": true,
  "scrollX": true,
  "bInfo": false,
  "pageLength": 10,
  "ajax": {
    "url": baseUrl + "/Employee_control/fetch_employeeList",
    "type": "POST"
  },
  "columns": [{
      "data": "id",
      "className": "reg_bg"
    },
    {
      "data": "name"
    },
    {
      "data": "email"
    },
    {
      "data": "mobileno"
    },
    {
      "data": "emp_id"
    },
    {
      "data": "address"
    },
    {
      "data": "action"
    }
  ]

});

Контроллер

public function fetch_employeeList(){
  $order_list=$this->Employee_model->fetch_employeeList();

// Datatables Variables
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));

$data['draw'] = 1;
$data['recordsTotal'] = count($order_list);
$data['recordsFiltered'] = count($order_list);
foreach ($order_list as $key => $row) 
{
$action='<a href="" class="action-btn action-btn-border">View</a><a href="" class="action-btn action-btn-red-bg">Archive</a>';
$arr_result = array(
            "id" =>$row->id,
            "name" => $row->firstname." ".$row->middlename." ".$row->lastname,
            "email" => $row->email_id,
            "mobileno" => $row->mobileno,
            "emp_id" => $row->employee_id,
            "address" => $row->address,
            "action" => $action
);

$data['data'][] = $arr_result;

}
//print_r($arr_result);
echo json_encode($data);
exit;
}

Модель

public function fetch_employeeList(){
        $this->db->select('*');
      $this->db->from('tbl_employee');

        $query = $this->db->get();
        $result = $query->result();
        if($result)
      {
          return $result;
      }
      else{
          return []; //I added empty array instated of 0. Using this my error goes of but records are not displaying from the database.
      }
    }

1 Ответ

0 голосов
/ 06 июня 2019

Проблема состоит в том, что ваш JSON-ответ, возвращаемый контроллером, должен всегда содержать свойство с именем data, и при написании кода в контроллере вы устанавливаете свойство data в массиве ответов только в том случае, еслиесть результаты.

В вашем контроллере вам нужно по умолчанию $data['data'] для пустого массива, подобного этому:

$data['draw'] = 1;
$data['recordsTotal'] = count($order_list);
$data['recordsFiltered'] = count($order_list);
$data['data'] = []; // add this line in controller

Для получения дополнительной информации см. руководство DataTables на сервере.боковая обработка (прокрутите вниз до раздела «Возвращенные данные»)

Обновление

В методе модели вы всегда должны возвращать массив вместо возврата 0когда нет результатов.Глядя на документацию для codeigniter, $query->getResult() вернет пустой массив, если результатов нет, поэтому вы можете обновить метод модели следующим образом:

public function fetch_employeeList(){
    $this->db->select('*');
    $this->db->from('tbl_employee');

    $query = $this->db->get();
    return $query->result();
}
...