DataTables使用您自己的参数读取ajax响应

时间:2017-06-29 10:09:40

标签: jquery ajax datatables

在服务器端模式下使用DataTables 1.10.15。我创建了一个PHP脚本来提供JSON响应,其中包含他们在文档中提到的参数:https://datatables.net/manual/server-side#Returned-data

我想将自己的参数添加到JSON响应中,例如

$response = [
    'data' => [ ], // Required by DataTables 
    'form_errors' => [ ] // Not required by DataTables
];
echo json_encode($response);

我对ajax调用的js看起来像这样:

var myTable = $('#myTable').DataTable( {
    "serverSide": true,
    "ajax": { 
        "url" : "/response.php",
        "method" : "POST"
    },
});

如何阅读ajax响应?我在API中看到有一个.on('xhr')方法(https://datatables.net/reference/event/xhr)在ajax请求完成后触发,例如

var myTable = $('#myTable').DataTable( {
    "serverSide": true,
    "ajax": { 
        "url" : "/response.php",
        "method" : "POST"
    },
}).on( 'xhr.dt', function () {
    // Read response here?
});

但是我找不到在那时读取ajax响应数据的方法。

有人知道这是否可行?

5 个答案:

答案 0 :(得分:4)

老问题,但我尝试回答可能需要未来,因为我有完全相同的问题,在找到他们的文档后我发现drawCallback

从你的代码:

var myTable = $('#myTable').DataTable( {
    "serverSide": true,
    "ajax": { 
        "url" : "/response.php",
        "method" : "POST"
    },
    "drawCallback": function (settings) { 
        // Here the response
        var response = settings.json;
        console.log(response);
    },
});

答案 1 :(得分:0)

在初始化代码块之后你可以这样做:

myTable.on('xhr', function () {
        var json = oTable.ajax.json();
        if (json) {
             // read the json here: json.form_errors
         }
});

答案 2 :(得分:0)

这应该是DataTable的ajax属性

"dataSrc": function(json) {
if (json.CustomVariable) {
    $("#some_span").html(json.CustomVariable);
}
// You can also modify `json.data` if required
return json.data;

根据相关代码的完整示例可以是

var myTable = $('#myTable').DataTable({
            "serverSide": true,
            "ajax": {
                "url": "/response.php",
                "method": "POST",
                "dataSrc": function(json) {
                    if (json.CustomVariable) {
                        $("#some_span").html(json.CustomVariable);
                    }
                    // You can also modify `json.data` if required
                    return json.data;
                },
            });

参考doc> DataTables

答案 3 :(得分:0)

你应该实现 dataFilter 函数:

var myTable = $('#myTable').DataTable( {
    "serverSide": true,
    "ajax": {
        "url" : "/response.php",
        "method" : "POST",
        dataFilter: function (data) {
            data = jQuery.parseJSON(data);

            return JSON.stringify(data.data.original);
        }.bind(this)
    }
});

答案 4 :(得分:-1)

您可以使用类似的ajax回调方法读取响应:

var myTable = $('#myTable').DataTable( {
    "serverSide": true,
    "ajax": { 
        "url" : "/response.php",
        "method" : "POST"
    },
    success: function(data) {
      // Request success
      console.log(data);       
    },
    error: function(data) {
      // Request failed
      console.log(data);
    }
});

我希望它能帮到你!