带有Ignited-Datatables CodeIgniter的Jquery DataTable

时间:2012-07-06 03:46:58

标签: codeigniter datatables

更新

  

我终于找到了解决这个问题的方法。如果你面对同样的话   作为我的问题,您可以尝试访问此link

我想在将Jquery DataTablesCodeIgniter Ignited-Datatables

集成时遇到问题

当我使用默认的DataTables sServerMethod 属性“GET”时,我得到了来自我的php的数据的json响应。但是由于CodeIgniter使用post,我坚持加载服务器数据,尽管该函数返回正确的json输出。

enter image description here

因此,我按照此guide sServerMethod 更改为“POST”。现在我没有坚持加载服务器数据,但我没有得到我需要的数据。

使用 sServerMethod GET进行JSON响应(获取正确的json,但卡在加载服务器数据时,如图中所示)

{
"sEcho": 0,
"iTotalRecords": 10,
"iTotalDisplayRecords": 10,
"aaData": [
    [
        "Munauwar",
        "Syed",
        "Mr",
        "6012345678",
        "0000-00-00",
        "basikal"
    ],        
    [
        "Mak",
        "Je Wei",
        "Mr",
        "6012345678",
        "0000-00-00",
        "motor"
    ]
],
"sColumns": "first_name,last_name,salutation,number,birthday,group_name"}

使用 sServerMethod POST

的JSON响应
{
"sEcho": 1,
"iTotalRecords": 10,
"iTotalDisplayRecords": 0,
"aaData": [],
"sColumns": "first_name,last_name,salutation,number,birthday,group_name"}

这是我的javascript代码

$('#table1').dataTable({
        "bProcessing": true,
        "bServerSide": true,            
        "sPaginationType": "bootstrap",
        "sAjaxSource": config.base_url + "contact/popup_contact",
        "sServerMethod": "POST"

    });

我在联系人控制器中的功能

function popup_contact()
{
    $this->datatables
         ->select('first_name,last_name,salutation,number,birthday,group_name')
         ->from('tb_contact')
         ->join('tb_contact_group', 'tb_contact.contact_group_id = tb_contact_group.contact_group_id');          

    echo $this->datatables->generate();             

}

3 个答案:

答案 0 :(得分:2)

如果上面的方法仍然不起作用,那么因为你设置了:$ config ['csrf_protection'] = true; //在你的Codeigniter配置中

只需在fnServerData调用中首先添加aoData.push行:

"fnServerData": function(sSource, aoData, fnCallback) {
            aoData.push({name: '<?php echo $this->security->get_csrf_token_name(); ?>', value: '<?php echo $this->security->get_csrf_hash(); ?>'});
                $.ajax({
                    'dataType': 'json',
                    'type': 'POST',
                    'url': sSource,
                    'data': aoData,
                    'success': fnCallback
                });
            }

答案 1 :(得分:1)

$('#smstable').dataTable({
"bProcessing": true,
"bServerSide": true,
"iDisplayLength": 20,
//"bPaginate": true,
"bAutoWidth": false,
"iDisplayStart": 0,
"bLengthChange": false,//for sorting 10,20,30,50 ....
"sAjaxSource": "././myadmin/ajaxadmin/dt_sms",
"aaSorting": [[ 1, "desc" ]],
"sPaginationType": "full_numbers",
"aoColumns":[
    {"bSearchable": false,"bSortable": false,"bVisible": false},
    {"bSearchable": true,"bSortable": true},
    {"bSearchable": false,"bSortable": false},
    {"bSearchable": true,"bSortable": true},
    {"bSearchable": false,"bSortable": true},
    {"bSearchable": false,"bSortable": false}
],
"fnServerData": function(sSource, aoData, fnCallback){
    $.ajax(
          {
            'dataType': 'json',
            'type'  : 'POST',
            'url'    : sSource,
            'data'  : aoData,
            'success' : fnCallback
          }
      );//end ajx
    // console.log(fnCallback);
}    

}); //结束数据

Just check my code and check if you missed something. That code works very fine with me.

答案 2 :(得分:0)

任何时候你都无法从服务器上加载数据......它基本上是由列集引起的。 只需计算“aoColumns”数组并确保它与视图文件中设置的表头完全相同。

一次又一次发生在我身上.....并且唯一的解决方案始终是列数组。