过滤 DataTable 的 AJAX 响应

Posted

技术标签:

【中文标题】过滤 DataTable 的 AJAX 响应【英文标题】:Filter AJAX Response for DataTable 【发布时间】:2019-09-08 02:29:31 【问题描述】:

我有一个 DataTable 函数。 parentObjData 来自其他地方,应过滤此 DataTable 以仅包含 idea_id 等于 parentObjData 的记录。

function BuildExampleDataTable(parentObjData, tableCounter) 
    oInnerTable = $("#example_" + tableCounter).DataTable(
        autoWidth: true,
        serverSide: true,
        processing: true,
        ajax:
        
            url: "/platform/api/?format=datatables",
            type: "get",
            data: function (d) 
                var searchData =
                    
                        idea_id: parentObjData,
                        draw: d.draw,
                        length: d.length,
                        start: d.start,
                        order: d.order,
                        columns: d.columns,
                        orderbyfield: d.columns[d.order[0].column].data
                    ;
                d.sData = JSON.stringify(searchData);
                return d.sData;
            
        ,
        columns: [
            data: 'idea_id', name: "idea_id.id",
            data: 'comment' ,
        ],
    );

/platform/api/?format=datatables 回复:

"data":["idea_id":1,"comment":"test comment","idea_id":1,"comment":"test comment again","idea_id":2,"comment":"another test comment?"],"recordsFiltered":3,"recordsTotal":3,"draw":1

parentObjData 正确到达函数,但未过滤 DataTable(它显示所有三个记录)。如何更改 ajax 调用的 data 部分以过滤 DataTable?

【问题讨论】:

return 来自 callback 函数没有什么意义。根据收到的数据构建您的数据表。 对,我可以使用searchCols 进行过滤,但我不希望idea_id 出现在数据表中 来自d.sData 你能解释一下吗? 【参考方案1】:

这是我的代码,你可以关注它

"ajax": 
        "url": contextRoot + "manage/callbackMessage/datatables",
        "data": function (d) 
            var req = 
                "dir": "",
                "colName": "",
                "draw": d.draw,
                "length": d.length,
                "start": d.start
            ;
            var queryReq = 
                "idea_id": parentObjData
            ;

            var columns = d.columns;
            var order = d.order;
            if (order.length > 0) 
                var orderFirst = order[0];
                var colIndex = orderFirst.column;
                req.dir = orderFirst.dir;
                req.colName = columns[colIndex].name || columns[colIndex].data;
            
            return $.extend(, req, queryReq);
        
    

在您的服务器代码中,您可以解析 dir colName drawidea_id 任何你想要的

更多详情https://datatables.net/reference/option/ajax.data

【讨论】:

以上是关于过滤 DataTable 的 AJAX 响应的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给 AJAX 以绑定 DataTable 不起作用

jQuery 数据表:使用 Ajax 分页进行搜索和过滤

搜索之后,p:dataTable将不会更新,除非调用两次搜索或者输入和清除过滤器中的某些内容

使用 jQuery ajax 调用重新加载 DataTable 内容

去除DataTable重复数据的三种方法

服务器端 Ajax JQuery CRUD DataTable - PHP PDO,MySql