2016-12-02 3 views
1

Ich erhalte diesen Fehler nur, wenn ich eine Spalte wähle, die französischen Inhalt darin hat. Es kann ein Sprachproblem sein. Was kann ich tun, um diesen Fehler zu vermeiden?datatables gibt ungültige JSON-Antwort zurück, wenn ich französischen Text von der Datenbank lade

DataTables Warnung: Tabelle ID = Beispiel - ungültige JSON-Antwort. Weitere Informationen zu diesem Fehler finden Sie in http://datatables.net/tn/1

$(document).ready(function() { 
    $('#example').DataTable({ 
     "processing": true, 
     "serverSide": true, 
     /*"contentType": false,*/ 
     "ajax": '<?=base_url()?>'+"posts/get_html_posts" 
    }); 
}); 
<table id="example" class=" ui table" cellspacing="0" width="100%"> 
    <thead> 
     <tr> 
      <th>No</th> 
      <th>Category Name</th> 
      <th>Subcategoty Name</th> 
      <th>Title En</th> 
      <th>Title Fr</th> 
      <th>Is Draft</th> 
      <th>Edit</th> 
      <th>Delete</th> 
      <th>Website url</th> 
     </tr> 
    </thead> 
</table> 

-Controller

public function get_html_posts() 
    { 
     require(APPPATH .'third_party/ssp.class.php'); 
     $table = 'posts'; 
     $primaryKey = 'post_id'; 
     $columns = array(
      array('db' => 'post_id','dt' => 0), 
      array('db' => 'category_id', 'dt' => 1), 
      array('db' => 'subcategory_id', 'dt' => 2), 
      array('db'=>'title_en','dt'=>3), 
      array('db'=>'title_fr','dt'=>4), 
      array('db' => 'is_draft','dt' => 5,"formatter"=>function($d,$row) { 
       if($row['is_draft']==1) 
       return "<spna class='ui orange label'>Draft</span>"; 
       else 
       return "<spna class='ui green label'>Published</span>"; 
      }), 
      array('db' => 'post_id','dt'=>6,"formatter"=>function($d,$row) { 
       return "<a href='".base_url()."posts/edit/".$row['post_id']."' class='ui orange button padding-10'><i class='write icon margin-0'></i></a>"; 
      }), 

      array('db'=>'post_id','dt'=>7,"formatter"=>function($d,$row) { 
       return "<a href='#' class='ui red button padding-10' onclick='return delete_record(this.id)' id='".$row['post_id']."'><i class='remove icon margin-0'></i></a>"; 
      }), 
      array('db'=>'post_slug','dt'=>8,"formatter"=>function($d,$row) 
      { 
       $web_url = "http://localhost"; 
       return "<a class='ui orange button padding-10' target='_blank' href=".$web_url.'category/'.str_replace('-','', $row['category_id']).'/'.$row['subcategory_id'].'/'.$row['post_id'].'/'.$row['post_slug']."><i class='expand icon margin-0'></i></a>"; 
      }) 

     ); 

     $sql_details = array(
      'user' => 'root', 
      'pass' => '', 
      'db' => 'my_demo', 
      'host' => 'localhost' 
     ); 
     //header('Content-Type: application/json'); 
     echo json_encode(
      SSP::simple($_GET, $sql_details, $table, $primaryKey, $columns) 
     ); 
    } 
+0

Können Sie auch die Ausgabe Ihres Ajax teilen? – philantrovert

+0

Klingt, als hätten Sie ein Problem mit der Zeichencodierung Ihrer AJAX-Antwort. Bitte zeigen Sie den PHP-Code an. –

+1

Wenn ich mit Französisch zu tun hatte, hatte ich einige Probleme mit der Verwendung von einfachen Anführungszeichen, da einfache Anführungszeichen oft in französischen Sätzen vorkommen. – Cashbee

Antwort

0

ich konfrontiert ähnliches Problem manchmal back.Make sicher, dass Sie eine gültige Json Antwort erhalten. Dies ist das beste Beispiel, in dem Sie sich auf alle mit jquery-Datatables verbundenen Abfragen beziehen können. Jquery Datatables

Mein Controller sah etwa so aus:

public function inbox() 
    { 
     $data = array(
        'receiverEmail' => $this->session->userdata['user_login']['loginEmail'], 
      ); 
     $response = $this->mail_receive->inbox($data); 

    $output = array(
         "iTotalRecords" =>$this->mail_receive->totalRecords($data), 
         "iTotalDisplayRecords" => $this->mail_receive->totalRecords($data), 
         "aaData" => $response, 
       ); 


     header('Content-Type: application/json'); 
     echo json_encode($output); 

    } 

Und das ist, wo ich den Ajax-Aufruf

<script> 
    $(document).ready(function() { 
     var table = $('#inbox').dataTable({ 


     "bServerSide": true, 
     "sAjaxSource": "<?php echo base_url(); ?>index.php/Inbox_redirect/inbox", 
     "bProcessing": true, 
     "order": [], 
     "bSortable" : true, 
      "aaSorting": [[2, 'asc']], 
     "sServerMethod": "GET", 
     "columns" : [ 
      {"data" : "mailId"}, 
      {"data" : "mailSender"}, 
      {"data" : "mailSubject"}, 
      {"data" : "mailContent"}, 
      {"data" : "mailSendDate"} ], 
     "columnDefs": [ 
     { 
      "targets": [ 0 ], //first column/numbering column 
      "orderable": false, //set not orderable 
     }, 
     ], 

    }); 
}); 


</script> 

Bitte senden Sie so etwas mehr Code gemacht, dass es einfacher ist, um Ihnen zu helfen !

+0

Ich habe Databases mit dem Beispiel https://datatables.net/examples/server_side/defer_loading.html –

+0

implementiert, bitte posten Sie Ihr Modell und Controller-Code ..... –

+0

Ich habe Controller-Code hinzugefügt. –

Verwandte Themen