更新
我终于找到了解决这个问题的方法。如果你面对同样的话 作为我的问题,您可以尝试访问此link
我想在将Jquery DataTables与CodeIgniter Ignited-Datatables库
集成时遇到问题当我使用默认的DataTables sServerMethod 属性“GET”时,我得到了来自我的php的数据的json响应。但是由于CodeIgniter使用post,我坚持加载服务器数据,尽管该函数返回正确的json输出。
因此,我按照此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();
}
答案 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”数组并确保它与视图文件中设置的表头完全相同。
一次又一次发生在我身上.....并且唯一的解决方案始终是列数组。