`
阅读更多

原文: 

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数据返回给页面
效果图如下:

 

分享到:
评论

相关推荐

    jQuery datatables插件

    - **Ajax加载**:支持异步加载数据,无需一次性加载整个表格,减少页面加载时间。 - **自定义样式**:提供多种预设样式和主题,也可以根据需求自定义样式。 - **API和扩展**:通过其丰富的API,开发者可以实现更复杂...

    jQuery实现Table分页跳转

    jQuery分页的基本思想是通过JavaScript动态加载或隐藏Table中的数据行,以实现分页显示。通常会结合后端接口获取数据,根据每页显示的数据量来划分页码,用户点击页码时,发送请求获取对应页的数据,并更新Table内容...

    jquery表格插件带分页动态数据表格代码

    在这个“jquery表格插件带分页动态数据表格代码”项目中,我们重点探讨的是如何利用jQuery实现一个功能丰富的表格,包括数据分页和动态加载。 一、jQuery表格插件 表格插件通常是基于jQuery构建的,用于增强HTML...

    jQuery json带分页的动态数据表格代码.zip

    在本示例中,我们关注的是使用jQuery和DataTables库创建一个带有分页功能的动态数据表格。这个压缩包"jQuery json带分页的动态数据表格代码.zip"包含了一个简单的JavaScript实现,它演示了如何从JSON文件中获取数据...

    ASP.NET利用MVC框架及JQuery技术实现登录、分页及等待

    5. **等待显示(Loading动画)**:在数据加载过程中,JQuery可以用来添加等待效果,如显示加载指示器或遮罩层,以告知用户系统正在处理请求。这可以通过CSS和JQuery的动画功能实现,通常在AJAX请求开始时显示,请求...

    jQuery Datatables 动态列+跨列合并实现代码

    jQuery DataTables 是一个流行的JavaScript库,用于将HTML表格转化为功能丰富的数据网格,具有排序、过滤...在实际应用中,可能还需要考虑数据的异步加载、列的动态添加和删除、以及各种用户交互事件的处理等高级功能。

    jQuery客户端表格分页显示

    `&lt;thead&gt;`用于定义表头,`&lt;tbody&gt;`存放数据行,`&lt;tfoot&gt;`可以用来添加页码或分页控制。 2. **数据绑定**:数据通常来源于服务器,通过Ajax异步请求获取。使用jQuery的`$.ajax`或者`$.getJSON`方法来获取JSON格式的...

    Datatables使用Ajax方式读取数据

    这里,`#example`是表格的ID,`processing`和`serverSide`选项表示Datatables将处理数据加载和分页,而`ajax`参数指定了数据源。 2. **Ajax数据源**:在示例中,数据源是"data.txt"。通常,这会是一个服务器端的...

    jquery 分页插件

    jQuery分页插件是网页开发中常用的一种工具,主要用于处理大量数据的展示,避免一次性加载过多内容导致页面响应变慢或用户体验下降。在网页中,如电商产品列表、论坛帖子等场景,通常会采用分页的方式,让用户按需...

    jQuery表格插件DataTables

    - **数据源支持**:DataTables支持多种数据源,包括DOM(直接从HTML表格获取数据)、Ajax(异步加载数据)、服务器端处理(仅发送请求参数,服务器返回处理后的数据)以及JSON、XML等多种数据格式。 - **排序功能**...

    DataTables很好用的数据表格工具

    对于动态数据,通常使用Ajax进行异步加载。 3. **与后端技术的结合**: - Java:在Java环境中,开发者可以使用诸如Spring MVC、Struts2等框架,配合JSON或者XML格式来传输数据,DataTables会自动处理这些数据并...

    jquery分页,无刷新,AJAX,排序,分页,查找

    本篇文章将详细讲解如何利用jQuery实现无刷新分页、AJAX数据加载、排序以及查找功能。 一、jQuery分页 jQuery分页功能允许用户在大量数据中轻松浏览,无需每次加载整个页面。它通过创建一系列链接或按钮来表示不同...

    jQuery不刷新分页动态数据表格代码

    在分页动态数据表格的实现中,jQuery通常会结合Ajax技术来实现数据的异步加载。Ajax,即Asynchronous JavaScript and XML,它允许网页在后台与服务器交换数据并更新部分网页内容,而无需重新加载整个页面。通过发送...

    jQuery dataTables与jQuery UI 对话框dialog的使用教程

    上述描述和示例代码中,展示了如何通过这些步骤将DataTables表格插件和jQuery UI Dialog对话框组件结合使用,以实现网页上的动态数据操作和用户交互功能。通过这种方式,开发者可以构建出既美观又实用的交互式Web...

    jquery无刷新分页、排序_aspx开发教程.rar

    在jQuery中,我们通常使用`.ajax()`方法发送异步请求,获取服务器端的分页数据,然后使用DOM操作来动态更新页面上的内容。 接下来是排序功能。在表格数据展示中,用户往往希望可以按列进行升序或降序排序。jQuery...

    jquery分页

    - **jQuery DataTables**:不仅支持分页,还包含排序、搜索等功能,是一个强大的数据表格管理插件。 - **Bootstrap-Pagination**:基于Bootstrap框架的分页插件,具有良好的响应式设计。 - **jQuery Paginate**:...

    PHP+Ajax+bootstrap+dataTables无刷新分页表格插件

    当页面加载或Ajax请求返回数据时,dataTables会自动填充表格内容并根据配置实现分页功能。同时,dataTables还提供了事件监听和自定义回调函数,允许开发者在用户与表格交互时执行额外的逻辑,比如在点击某行数据时...

    jquerydatatable服务器端分页实现方法[借鉴].pdf

    总的来说,JQuery DataTables 的服务器端分页允许高效地处理大量数据,减轻客户端的负担,同时提供了丰富的定制化选项以适应各种需求。正确配置和使用服务器端分页,对于提升Web应用的用户体验和性能至关重要。

    jquery分页插件

    而Ajax分页则是在用户切换页面时,通过异步请求获取所需页面的数据,这种方式对大数据量的处理更为友好,因为它减少了初次加载时的数据量,同时保证了页面的流畅性。 关于样式支持,不同的jQuery分页插件提供了多样...

    datatables刷新插件fnReloadAjax

    本资源提供的插件`fnReloadAjax`是针对`DataTables`的一个增强功能,它使得在不刷新整个页面的情况下,能够重新加载表格中的数据,这对于实时更新或者异步获取数据的场景尤为重要。 `DataTables`本身支持Ajax数据源...

Global site tag (gtag.js) - Google Analytics