DataTables Обработка на стороне сервера в CodeIgniter, но данные не отображаются в таблице - PullRequest
0 голосов
/ 12 июня 2019

Я могу распечатать данные, но данные не отображаются в таблице.
Я пытаюсь использовать Datatable для отображения данных.

Вот сообщения об ошибках:

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

enter image description here

модель

function allposts_count()
{   
    $query = $this
            ->db
            ->get('books');

    return $query->num_rows();  

}

function allposts($limit,$start,$col,$dir)
{   
    $query = $this
            ->db
            ->limit($limit,$start)
            ->order_by($col,$dir)
            ->get('books');

    if($query->num_rows()>0)
    {
        return $query->result(); 
    }
    else
    {
        return null;
    }

}

контроллер

function Book()
{
    $columns = array( 
                        0 =>'id', 
                        1 =>'title',

                    );

    $limit = $this->input->post('length');
    $start = $this->input->post('start');

    $columns=$this->input->post('order')[0]['column'];
    $order = $columns;
    $dir = $this->input->post('order')[0]['dir'];

    $totalData = $this->user_model->allposts_count();

    $totalFiltered = $totalData; 

    if(empty($this->input->post('search')['value']))
    {            
        $posts = $this->user_model->allposts($limit,$start,$order,$dir);
    }
    else {
        $search = $this->input->post('search')['value']; 

        $posts =  $this->user_model->posts_search($limit,$start,$search,$order,$dir);

        $totalFiltered = $this->user_model->posts_search_count($search);
    }

    $data = array();
    if(!empty($posts))
    {
        foreach ($posts as $post)
        {
            $nestedData['id'] = $post->book_id;
            $nestedData['title'] = $post->book_title;

            $data[] = $nestedData;
        }
    }

    $json_data = array(
                "draw"            => intval($this->input->post('draw')),  
                "recordsTotal"    => intval($totalData),  
                "recordsFiltered" => intval($totalFiltered), 
                "data"            => $data   
                );

    $json = json_encode($json_data); 
    echo $json;
    $this->load->view('templates/header');
    $this->load->view('users/Book',$json);
    $this->load->view('templates/footer');
}

просмотр

<div class="container">
    <h1>Server Side Process Datatable</h1>
    <table id="example" class="display" cellspacing="0" width="100%">
        <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>

        </tr>
        </thead>
        <tfoot>
        <tr>
            <th>ID</th>
            <th>Name</th>

        </tr>
        </tfoot>
    </table>

    <!--create modal dialog for display detail info for edit on button cell click-->
    <div class="modal fade" id="myModal" role="dialog">
        <div class="modal-dialog">
            <div id="content-data"></div>
        </div>
    </div>
</div>


<script>
    $(document).ready(function(){
        var dataTable=$('#example').DataTable({
            "processing": true,
            "serverSide":true,
            "ajax":{
             "url": "<?php echo base_url('users/Book') ?>",
         "dataType": "json",
         "type": "POST",
         "data":{  '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>' }
                       },
               "columns": [
              { "data": "book_id" },
              { "data": "book_title" },

           ]     
        });
    });
</script>

Ответы [ 3 ]

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

Вы должны отобразить $ data для отображения данных в таблице # пример.

0 голосов
/ 14 июня 2019
 <table id="example" cellpadding="0" cellspacing="0">
  <thead><tr>
    <th>ID</th>
    <th>Name</th>
  </tr></thead>

  <tbody>
    <!-- rows will go here -->
  </tbody>
</table> 

И в JavaScript

$("#example tbody").html(someHtmlString);

У вас нет команды на добавление запроса возврата в ваш код. И отладка, чтобы проверить, являются ли данные действительными или нет.

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

datatables ожидает чистого ответа json .если бы вы пошли по шагам отладки по опубликованной вами ссылке, вы бы увидели, что ваш ответ также содержит представление.

здесь у вас есть представление json, а затем:

$json = json_encode($json_data); 
      echo $json;
      $this->load->view('templates/header');
      $this->load->view('users/Book',$json);
      $this->load->view('templates/footer');

удалите представления и/ или перенести материал JSON на другой URL.затем обновите "url": "<?php echo base_url('users/Book') ?>", до нового URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...