0
votes

Traitement côté serveur DataTables dans CodeIgniter mais les données ne sont pas affichées dans le tableau

Je peux imprimer les données mais les données ne sont pas affichées dans le tableau.
J'essaie d'utiliser Datatable pour afficher les données.

Voici les messages d'erreur:

Avertissement DataTables: table id = example - Réponse JSON non valide. Pour plus d'informations sur cette erreur, veuillez consulter http://datatables.net/tn/1 p>

 entrez la description de l'image ici

modèle

<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>

controller

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

view

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

}


0 commentaires

3 Réponses :


0
votes

datatables attend une réponse json pure . si vous avez suivi les étapes de débogage dans le lien que vous avez posté, vous auriez vu que votre réponse contient également une vue.

ici vous avez json puis une vue:

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

supprimer les vues et / ou déplacer les trucs json vers une autre URL. puis mettez à jour "url": " php echo base_url ('users / Book')?>", vers la nouvelle URL.


2 commentaires

J'essaie mais j'essaye toujours la même chose.


Open dev Outils> Réseau. actualiser la page. Trouvez la demande d'URL à votre Ajax pour les fichiers de données. cliquez dessus. Cliquez sur la réponse. Quelle est la réponse?



0
votes

vous devriez faire écho à $ data pour afficher les données dans le tableau #example.


1 commentaires

J'essaye mais un problème.



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

0 commentaires