定制datatable ajax发送给服务端的数据

官网描述

http://www.datatables.club/manual/server-side.html#initdt

DT自动请求的参数(Sent parameters)

当开启了 服务器模式时,DataTables 会发送如下参数到服务器

ps:需要说明的是

如果你是 Java 开发者,那么使用struts2的需要注意,会有错误抛出,因为处理不了类似 columns[i][search][regex]的变量
如果是你 .net 开发者,那么可能会遇到 maxQueryStringLength 的错误
如果是你 php 开发者,那么恭喜你,php天生支持以上参数的解析,自动转为数组,好不公平啊

图片.png

显然使用java时, 特别是spring时, 在controller处理接收到的请求参数会非常复杂, 如何才能精简,让datatabe只发送想要的数据呢?

服务器需要返回的数据(Returned data)

一旦 DataTables 发送了请求,上面的参数就会传送给服务器,那么你需要接受到这些参数并做相应的逻辑处理然后按照下面的格式讲组装好的JSON数据返回 (不是每个参数都需要接受处理,根据自己的业务需要)

图片.png

定制代码如下:

js端

        var table = $('#example').DataTable({
           responsive: true ,
           serverSide:true,
           ajax: {
               url: 'queryRcDetail.json',
               //dataSrc: 'data',
               data: function(d) {
                 // return JSON.stringify(d);  
                 var str = {
                         "draw": d.draw,
                         "start": d.start,
                         "length": d.length,
                         "search": d.search.value
                 };
                 return JSON.stringify(str);
               },
               type: "POST",
               contentType:'application/json; charset=UTF-8'
           },

在ajax中, 为data添加函数, 对待发送数据进行筛选和定制。

发送的请求数据如下:


图片.png

java 端 controller

这里使用的是spring boot

    @RequestMapping(value= {"queryRcDetail.json"} , method = RequestMethod.POST)
    @ResponseBody
    public RcDetailResponse queryRcDetail(@RequestBody RcDetailRequest req) {
        RcDetailResponse res = new RcDetailResponse();
        
        logger.debug("接收到风控明细分页查询请求:" + req.toString());

        return res;
    }

RcDetailRequest 的设计如下:

public class RcDetailRequest {

    private int draw;
    private int start;
    private int length;
    private String search;

...
}

java 响应端

需要根据要求返回数据

public class RcDetailResponse {

    private int draw;
    private int recordsTotal;
    private int recordsFiltered;
    private String error;
    
    private List data;

    

你可能感兴趣的:(定制datatable ajax发送给服务端的数据)