我正在尝试使用json源中的数据刷新数据表。 我在组合中选择一个类型,然后我提交,我的ajax函数获取数据,我在数据表上设置这些数据。
这是我的js:
$('#submit_search_type_client').on('click', function(e){
var idType = $('#lst_type').val();
var idclient = $('#frmTab_Client_type').val();
var data = "idType=" + idType + "&idClient=" + idclient;
$.ajax({
type: "POST",
url: root_url + "client/getTypes",
data: data,
dataType: 'JSON',
success: function(data){
if(data.success){
var source = data.myreturn;
$('#mydatatables').dataTable( {
"processing": true,
"serverSide": true,
"pageLength": 5,
language: {
url: 'views/js/plugins/datatables/french.json'
},
"ajax": source
});
}
},
error: function(data){
}
}); // End ajax
});
我的PHP函数返回我的数据:
if($myresult= $this->db->query($requete))
{
$myresult->setFetchMode(PDO::FETCH_NUM);
$line = $myresult->fetchAll();
}
$tab['data'] = json_encode($line);
echo json_encode(array('success'=>'true', 'myreturn'=>$tab));
如果我让PDO :: FETCH_NUM,我的json看起来像这样:
{"success":"true","myreturn":{"data":"[[\"6017\",\"Client Type TOTO\",\"01\\\/09\\\/2017 08:00\"],[\"6018\",\"Client Type TOTO\",\"01\\\/09\\\/2017 09:00\"],[\"6019\",\"Client Type TOTO\",\"01\\\/09\\\/2017 10:00\"],[\"6020\",\"Client Type TOTO\",\"01\\\/09\\\/2017 11:00\"],[\"6021\",\"Client Type TOTO\",\"01\\\/09\\\/2017 12:00\"],[\"6052\",\"Client Type TOTO\",\"05\\\/09\\\/2017 19:00\"],[\"6156\",\"Client Type TOTO\",\"21\\\/09\\\/2017 15:00\"],[\"6163\",\"Client Type TOTO\",\"22\\\/09\\\/2017 10:00\"],[\"6166\",\"Client Type TOTO\",\"22\\\/09\\\/2017 13:00\"],[\"6167\",\"Client Type TOTO\",\"22\\\/09\\\/2017 14:00\"],[\"6170\",\"Client Type TOTO\",\"22\\\/09\\\/2017 17:00\"],[\"6172\",\"Client Type TOTO\",\"22\\\/09\\\/2017 19:00\"],[\"6204\",\"Client Type TOTO\",\"28\\\/09\\\/2017 15:00\"],[\"6223\",\"Client Type TOTO\",\"02\\\/10\\\/2017 10:00\"],[\"6224\",\"Client Type TOTO\",\"02\\\/10\\\/2017 11:00\"],[\"6225\",\"Client Type TOTO\",\"02\\\/10\\\/2017 12:00\"],[\"6244\",\"Client Type TOTO\",\"03\\\/10\\\/2017 19:00\"],[\"6263\",\"Client Type TOTO\",\"06\\\/10\\\/2017 14:00\"],[\"6264\",\"Client Type TOTO\",\"06\\\/10\\\/2017 15:00\"],[\"6265\",\"Client Type TOTO\",\"06\\\/10\\\/2017 16:00\"],[\"6266\",\"Client Type TOTO\",\"06\\\/10\\\/2017 17:00\"],[\"6277\",\"Client Type TOTO\",\"09\\\/10\\\/2017 16:00\"],[\"6278\",\"Client Type TOTO\",\"09\\\/10\\\/2017 17:00\"],[\"6288\",\"Client Type TOTO\",\"10\\\/10\\\/2017 15:00\"],[\"6290\",\"Client Type TOTO\",\"10\\\/10\\\/2017 17:00\"]]"}}
我没有来自Datatables的错误,但我的数据表中没有数据。
如果在PHP中我替换
$tab['data'] = json_encode($ine);
by
$tab['data'] = $line;
我收到这个:“DataTables警告:table id = table_availabilities - JSON响应无效。有关此错误的详细信息,请参阅http://datatables.net/tn/1”
如果在我的PDO SELECT中,我用PDO :: FETCH_ASSOC替换PDO :: FETCH_NUM
我收到此消息:“DataTables警告:table id = table_availabilities - 无效的JSON响应。有关此错误的详细信息,请参阅http://datatables.net/tn/1”
我尝试了另一件事,在我的ajax中,我为源设置了一个类似的文本文件:
{ “数据”:[ [ “TOTO” “你好你好你好” ] [ “TOTO” “你好你好你好” ] [ “TOTO” “你好你好你好” ] [ “TOTO” “你好你好你好” ] [ “TOTO” “你好你好你好” ] [ “TOTO” “你好你好你好” ] [ “TOTO” “你好你好你好” ] ] }
它有效,所以我将我的json返回与这个文本文件进行比较,我看到我有:
{"data":"[[\"6017\",\"Client Type TOTO\",\"01\\\/09\\\/2017 08:00\"],[\"6018\",\"Client Type TOTO\",\"01\\\/09\\\/2017 09:00\"], ...
文本文件:
{
"data": [
[
"TOTO",
"hihihi"
],
[
"TOTO",
"hihihi"
], ...
不同之处在于“数据”之后:我有这样的说法:“看起来它是一个字符串,我可以纠正这个吗?
由于
答案 0 :(得分:1)
让我们看一下手册,你会看到,ajax
选项需要链接到脚本,它会返回一些数据。
在您的情况下data.myreturn
不是脚本的链接,它是带有数据的字符串。另外我不明白为什么你做ajax-request然后在回调中另一个来自datatables
的ajax请求被触发。我想这是因为对ajax
财产的误解。
那么,你需要改变什么:
$('#submit_search_type_client').on('click', function(e){
var idType = $('#lst_type').val();
var idclient = $('#frmTab_Client_type').val();
var data = "idType=" + idType + "&idClient=" + idclient;
// Full url
var url = root_url + "client/getTypes?" + data;
$('#mydatatables').dataTable( {
"processing": true,
"serverSide": true,
"pageLength": 5,
language: {
url: 'views/js/plugins/datatables/french.json'
},
// Full url is passed to ajax. URL, not data
// Ajax request to this `url` should return data
"ajax": url
} );
});
在你的php中你可以这样做:
$line = [];
if($myresult= $this->db->query($requete))
{
$myresult->setFetchMode(PDO::FETCH_NUM);
$line = $myresult->fetchAll();
}
// Return data key only
echo json_encode(array('data' => $line));
最终警告。默认情况下,将数据传递到ajax
选项值的方法是GET。因此,我使用GET参数创建了url
作为网址。
您可以按照docs中的说法将方法更改为POST
,但是您必须在后期请求中将数据作为参数传递。但是文档中描述了一切。