Jquery datatable jsonp 显示后台json数据

Jquery datable可以说是最强大的jquery组件,可以提供的配置参数非常之多,基本上可以满足所有的table数据展现。本文会介绍使用jsonp这种方式的数据展现。Jsonp是为了解决跨域JavaScript交互问题,基于浏览器回调JavaScript function方法的机制。

1、技术点


1)、 spring mvc

2)、 jquery datatable

3)、 fastjson

4)、 jquery


2、jquery table展示json数据时,后台必须提供的参数

draw 计数器,为了保证ajax请求的顺序性,因为有些异步的请求,不会保证请求的顺序

recordsTotal 总记录数

recordsFiltered 过滤后的总记录数

data 具体的数据对象数组,用于前台展现

serverside=true的情况下,并且以ajax的方式提交请求,那么这四个参数必须在后台中必须全部提供,缺一不可,否则jquery table无法显示数据。

2.1 spring mvc 后台代码

@RequestMapping(value = "/getJsonData", produces = "text/plain;charset=utf-8")
@ResponseBody
public String getJsonData(HttpServletRequest req, 
      @RequestParam(required = false) String callback,
      @RequestParam(required = false) String searchType
      @RequestParam(required = false) String draw, 
      @RequestParam(required = false) Integer start,
      @RequestParam(required = false) Integer length) {

    Map<String, Object> maps = new HashMap<>();
    List<AppAccess> results = appAccessService.findList(appAccess, pagerequset);
    int totalCount = appAccessService.findListCount(appAccess);
    maps.put("draw", draw);
    maps.put("recordsTotal", totalCount);
    maps.put("recordsFiltered", totalCount);
    maps.put("data", results);

    JSONPObject obj = new JSONPObject(callback);
    obj.addParameter(maps);
    return obj.toString();
  }

2.2 前端代码

   $(document).ready(function () {
    var gridTable = $('#grid-table').dataTable({
        'serverSide': true,
        'ajax': {
            'url': '/appaccess/getJsonData',
            'dataType': 'jsonp',
            'type': 'POST'
        },
        'aoColumns': [
            {'data': 'id'},
            {'data': 'appUrl'},
            {'data': 'appName'},
            {'data': 'manager'},
            {'data': 'developer'},
            {'data': 'sequence'},
        ],
        // 默认排序字段
        'aaSorting': [['0', 'DESC']],
        // 禁用列排序
        "aoColumnDefs": [
            {"bSortable": false, "aTargets": [ 6 , 7]}
        ],
        // 查询表单定义
        'searchForm': '#search-form',
        // 批量表单开关
        'batchEnalble': false
    });
});

3、使用jsonp的形式提交json字符串

3.1 前端代码

$(document).ready(function () {
    var gridTable = $('#grid-table').dataTable({
        'serverSide': true,
        'ajax': {
            'url': '/appaccess/getJsonData',
            'dataType': 'jsonp',
            'type': 'POST'
        },
        'aoColumns': [
            {'data': 'id'},
            {'data': 'appUrl'},
            {'data': 'appName'},
            {'data': 'manager'},
            {'data': 'developer'},
            {'data': 'sequence'},
        ],
        // 默认排序字段
        'aaSorting': [['0', 'DESC']],
        // 禁用列排序
        "aoColumnDefs": [
            {"bSortable": false, "aTargets": [ 6 , 7]}
        ],
        // 查询表单定义
        'searchForm': '#search-form',
        // 批量表单开关
        'batchEnalble': false
    });
});

3.2 后端代码

@RequestMapping(value = "/getJsonData", produces = "text/plain;charset=utf-8")
@ResponseBody
public String getJsonData(HttpServletRequest req, 
      @RequestParam(required = false) String callback,
      @RequestParam(required = false) String searchType
      @RequestParam(required = false) String draw, 
      @RequestParam(required = false) Integer start,
      @RequestParam(required = false) Integer length) {

    Map<String, Object> maps = new HashMap<>();
    List<AppAccess> results = appAccessService.findList(appAccess, pagerequset);
    int totalCount = appAccessService.findListCount(appAccess);
    maps.put("draw", draw);
    maps.put("recordsTotal", totalCount);
    maps.put("recordsFiltered", totalCount);
    maps.put("data", results);

    JSONPObject obj = new JSONPObject(callback);
    obj.addParameter(maps);
    return obj.toString();
  }


这里是使用阿里巴巴的fastjson中的JSONPObject对象来生成JavaScript function,这个function将会被前端浏览器调用。注意,这里没有配置callback方法的名称。默认情况下,浏览器会生成一个唯一的名称,例如:jQuery203021832338930107653_1443529101136,然后以callback=jQuery203021832338930107653_1443529101136的形式传递给后端。后端处理完数据后,会以

jQuery203021832338930107653_1443529101136{
    //这里会包含前台需要的json数据
}

前端浏览器会执行jQuery203021832338930107653_1443529101136这个回调方法来展现json数据。

 

本文是jquery datable系列中的第一篇,以后陆续会发,敬请期待。





  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值