Jquery Datatables 异步分页加载数据

原文: 

Jquery Datatables 异步分页加载数据

正在做的一个Web项目,其中用到了jQuery datatables这个表格控件,说实话挺好用的,顺便自己记录一下

首先,定义一个<table>表格

 

[html]  view plain  copy
 
  1.         <table id="datatable">  
  2.             <thead>  
  3.                 <tr>  
  4.                     <th>ID</th>  
  5.                     <th>巡查单ID</th>  
  6.                     <th>站点ID</th>  
  7.                     <th>站点名称</th>  
  8.                     <th>问题描述</th>  
  9. <span style="white-space:pre">                    </span><th>状态</th>  
  10.                     <th>操作</th>  
  11.                 </tr>  
  12.             </thead>  
  13.             <tbody></tbody>  
  14.         </table>  

 

 

[javascript]  view plain  copy
 
  1. var dtable;//定义datatable的全局变量  
[javascript]  view plain  copy
 
  1. //其中 fnInitComplete和sSrollY属性控制datatable刷新时不整个页面刷的效果;  
[javascript]  view plain  copy
 
  1. function doSearch() {  
  2.     if(dtable!=null){  
  3.         dtable.fnClearTable(0);  
  4.         dtable.fnDraw(); //重新加载数据  
  5.     }else{  
  6.     dtable = $("#datatable").dataTable({  
  7.         "oLanguage" : { // 汉化  
  8.             "sUrl" : "<%=path%>/DataTables/js/dataTables.language.txt"  
  9.             },  
  10.             "bStateSave" : true,  
  11.             "bJQueryUI" : true,  
  12.             "bPaginate" : true,// 分页按钮  
  13.             "bFilter" : false,// 搜索栏  
  14.             "bLengthChange" : true,// 每行显示记录数  
  15.             "iDisplayLength" : 10,// 每页显示行数  
  16.             "bSort" : false,// 排序  
  17.             "bInfo" : true,// Showing 1 to 10 of 23 entries 总记录数没也显示多少等信息  
  18.             "bWidth" : true,  
  19.             "bScrollCollapse" : true,  
  20.             "sPaginationType" : "full_numbers"// 分页,一共两种样式 另一种为two_button // 是datatables默认  
  21.             "bProcessing" : true,  
  22.             "bServerSide" : true,  
  23.             "bDestroy" : true,  
  24.             "bSortCellsTop" : true,  
  25.             "sAjaxSource" : "<%=path%>/jsp/stat.do?action=statRevampList",  
  26.             "sScrollY""100%",  
  27.             "fnInitComplete"function() {  
  28.                 this.fnAdjustColumnSizing(true);  
  29.              },  
  30.             "fnServerParams" : function(aoData) {  
  31.                 aoData.push({  
  32.                     "name" : "statId",  
  33.                     "value" : encodeURI($("#s_statId").val())  
  34.                 });  
  35.             },  
  36.             "aoColumns" : [   
  37.                             {"mData" : "statCleanRevampId"},   
  38.                             {"mData" : "statCleanId"},   
  39.                             {"mData" : "statId"},   
  40.                             {"mData" : "statName"},   
  41.                             {"mData" : "problemDes"},   
  42.                             {"mData" : "revampStatus"} ],  
  43.             "aoColumnDefs":[  
  44.                             {  
  45.                                 "sClass":"center",  
  46.                                 "aTargets":[6],  
  47.                                 "mData":"statCleanRevampId",  
  48.                                 "mRender":function(a,b,c,d){//a表示statCleanRevampId对应的值,c表示当前记录行对象  
  49.                                     return '<a href=\"javascript:void(0);\" onclick=\"del('+a+')\">删除</a>'  
  50.                                 + '<a href=\"javascript:void(0);\" onclick=\"editForm('+c.statCleanRevampId+','+c.statCleanId+','  
  51.                                 +c.revampOrgan+',\''+c.statName+'\',\''+c.problemDes+'\')\">编辑</a>'  
  52.                                     + ' <a href=\"javascript:void(0);\" onclick=\"check('+a+',1)\">审核通过</a>'  
  53.                                     + ' <a href=\"javascript:void(0);\" onclick=\"check('+a+',2)\">审核不通过</a>';  
  54.                                 }  
  55.                             },//隐藏列Index=0,1,2的三列  
  56.                             {  
  57.                                 "aTargets":[0],  
  58.                                 "visible":false  
  59.                             },  
  60.                             {  
  61.                                 "aTargets":[1],  
  62.                                 "visible":false  
  63.                             },  
  64.                             {  
  65.                                 "aTargets":[2],  
  66.                                 "visible":false  
  67.                             }  
  68.                             ],  
  69.             "fnRowCallback" : function(nRow, aData, iDisplayIndex) {//相当于对字段格式化  
  70.                 if (aData["revampStatus"] == 0) {  
  71.                     $('td:eq(5)', nRow).html("结束");  
  72.                 } else if (aData["revampStatus"] == 1) {  
  73.                     $('td:eq(5)', nRow).html("进行中");  
  74.                 } else if (aData["revampStatus"] == 2) {  
  75.                     $('td:eq(5)', nRow).html("完成");  
  76.                 } else if (aData["revampStatus"] == 3) {  
  77.                     $('td:eq(5)', nRow).html("驳回");  
  78.                 }  
  79.             },  
  80.             "fnServerData" : function(sSource, aoData, fnCallback) {  
  81.                 $.ajax({  
  82.                     "type" : 'get',  
  83.                     "url" : sSource,  
  84.                     "dataType" : "json",  
  85.                     "data" : {  
  86.                         aoData : JSON.stringify(aoData)  
  87.                     },  
  88.                     "success" : function(resp) {  
  89.                         fnCallback(resp);  
  90.                     }  
  91.                 });  
  92.             }  
  93.         });  
  94.     }}  

 

后台action返回json格式数据,action方法对应如下内容

 

[java]  view plain  copy
 
  1. response.setCharacterEncoding("UTF-8");  
  2. PrintWriter out = null;  
  3. String json = null// 返回的json数据    
  4. try  
  5. {  
  6.     out = response.getWriter();  
  7. }  
  8. catch (IOException e)  
  9. {  
  10.     e.printStackTrace();  
  11. }  
  12. String statName = null;  
  13. String sEcho = "0";// 记录操作的次数  每次加1  
  14. String iDisplayStart = "0";// 起始  
  15. String iDisplayLength = "10";// size  
  16. int count = 0//查询出来的数量  
  17. String aoData = request.getParameter("aoData");  
  18. //获取jquery datatable当前配置参数  
  19. JSONArray jsonArray = JSONArray.fromObject(aoData);  
  20. for (int i = 0; i < jsonArray.size(); i++)  
  21. {  
  22.     try  
  23.     {  
  24.         JSONObject jsonObject = (JSONObject)jsonArray.get(i);  
  25.         if (jsonObject.get("name").equals("sEcho"))  
  26.             sEcho = jsonObject.get("value").toString();  
  27.         else if (jsonObject.get("name").equals("iDisplayStart"))  
  28.             iDisplayStart = jsonObject.get("value").toString();  
  29.         else if (jsonObject.get("name").equals("iDisplayLength"))  
  30.             iDisplayLength = jsonObject.get("value").toString();  
  31.         else if (jsonObject.get("name").equals("statId"))  
  32.             statName = jsonObject.get("value").toString();                  
  33.     }  
  34.     catch (Exception e)  
  35.     {  
  36.         break;  
  37.     }  
  38. }  
  39.   
  40. JSONArray jsonArray2 = new JSONArray();  
  41. JSONObject jsonObject2 = new JSONObject();  
  42.   
  43. StatCleanService service = new StatCleanService();  
  44. //为操作次数加1  
  45. int initEcho = Integer.parseInt(sEcho) + 1;  
  46. count = service.getStatCleanRevampCount(statName);//总记录数  
  47. List statFailList = service.getStatCleanRevampList(Integer.parseInt(iDisplayStart), Integer.parseInt(iDisplayLength), statName);  
  48. for (Object object : statFailList)  
  49. {  
  50.     StatCleanRevampNoticeTable table = (StatCleanRevampNoticeTable)object;  
  51.     jsonObject2.put("statCleanRevampId", table.getStatCleanRevampId());  
  52.     jsonObject2.put("statCleanId", table.getStatCleanId());  
  53.     jsonObject2.put("statId", table.getStatId());  
  54.     jsonObject2.put("statName", table.getStatName());  
  55.     jsonObject2.put("revampStatus", table.getRevampStatus());  
  56.     jsonObject2.put("problemDes", table.getProblemDes());  
  57.     jsonArray2.add(jsonObject2);  
  58. }  
  59.   
  60. json = "{\"sEcho\":" + initEcho + ",\"iTotalRecords\":" + count + ",\"iTotalDisplayRecords\":" + count + ",\"aaData\":" + jsonArray2.toString() + "}";  
  61. //传到页面    
  62. out.println(json);  
  63. out.close();  

其中参数

[java]  view plain  copy
 
  1. sEcho,iTotalRecords,iTotalDisplayRecords,aaData名称是固定的,不能修改;  
[java]  view plain  copy
 
  1. iDisplayStart,iDisplayLength为每次查询的起始记录和长度;  


加载页面url链接-->load form-->指向分页的action-->json数据返回给页面
效果图如下:

 

猜你喜欢

转载自it1990eye0920.iteye.com/blog/2335730