原文:
Jquery Datatables 异步分页加载数据
正在做的一个Web项目,其中用到了jQuery datatables这个表格控件,说实话挺好用的,顺便自己记录一下
首先,定义一个<table>表格
- <table id="datatable">
- <thead>
- <tr>
- <th>ID</th>
- <th>巡查单ID</th>
- <th>站点ID</th>
- <th>站点名称</th>
- <th>问题描述</th>
- <span style="white-space:pre"> </span><th>状态</th>
- <th>操作</th>
- </tr>
- </thead>
- <tbody></tbody>
- </table>
- var dtable;//定义datatable的全局变量
- //其中 fnInitComplete和sSrollY属性控制datatable刷新时不整个页面刷的效果;
- function doSearch() {
- if(dtable!=null){
- dtable.fnClearTable(0);
- dtable.fnDraw(); //重新加载数据
- }else{
- dtable = $("#datatable").dataTable({
- "oLanguage" : { // 汉化
- "sUrl" : "<%=path%>/DataTables/js/dataTables.language.txt"
- },
- "bStateSave" : true,
- "bJQueryUI" : true,
- "bPaginate" : true,// 分页按钮
- "bFilter" : false,// 搜索栏
- "bLengthChange" : true,// 每行显示记录数
- "iDisplayLength" : 10,// 每页显示行数
- "bSort" : false,// 排序
- "bInfo" : true,// Showing 1 to 10 of 23 entries 总记录数没也显示多少等信息
- "bWidth" : true,
- "bScrollCollapse" : true,
- "sPaginationType" : "full_numbers", // 分页,一共两种样式 另一种为two_button // 是datatables默认
- "bProcessing" : true,
- "bServerSide" : true,
- "bDestroy" : true,
- "bSortCellsTop" : true,
- "sAjaxSource" : "<%=path%>/jsp/stat.do?action=statRevampList",
- "sScrollY": "100%",
- "fnInitComplete": function() {
- this.fnAdjustColumnSizing(true);
- },
- "fnServerParams" : function(aoData) {
- aoData.push({
- "name" : "statId",
- "value" : encodeURI($("#s_statId").val())
- });
- },
- "aoColumns" : [
- {"mData" : "statCleanRevampId"},
- {"mData" : "statCleanId"},
- {"mData" : "statId"},
- {"mData" : "statName"},
- {"mData" : "problemDes"},
- {"mData" : "revampStatus"} ],
- "aoColumnDefs":[
- {
- "sClass":"center",
- "aTargets":[6],
- "mData":"statCleanRevampId",
- "mRender":function(a,b,c,d){//a表示statCleanRevampId对应的值,c表示当前记录行对象
- return '<a href=\"javascript:void(0);\" onclick=\"del('+a+')\">删除</a>'
- + '<a href=\"javascript:void(0);\" onclick=\"editForm('+c.statCleanRevampId+','+c.statCleanId+','
- +c.revampOrgan+',\''+c.statName+'\',\''+c.problemDes+'\')\">编辑</a>'
- + ' <a href=\"javascript:void(0);\" onclick=\"check('+a+',1)\">审核通过</a>'
- + ' <a href=\"javascript:void(0);\" onclick=\"check('+a+',2)\">审核不通过</a>';
- }
- },//隐藏列Index=0,1,2的三列
- {
- "aTargets":[0],
- "visible":false
- },
- {
- "aTargets":[1],
- "visible":false
- },
- {
- "aTargets":[2],
- "visible":false
- }
- ],
- "fnRowCallback" : function(nRow, aData, iDisplayIndex) {//相当于对字段格式化
- if (aData["revampStatus"] == 0) {
- $('td:eq(5)', nRow).html("结束");
- } else if (aData["revampStatus"] == 1) {
- $('td:eq(5)', nRow).html("进行中");
- } else if (aData["revampStatus"] == 2) {
- $('td:eq(5)', nRow).html("完成");
- } else if (aData["revampStatus"] == 3) {
- $('td:eq(5)', nRow).html("驳回");
- }
- },
- "fnServerData" : function(sSource, aoData, fnCallback) {
- $.ajax({
- "type" : 'get',
- "url" : sSource,
- "dataType" : "json",
- "data" : {
- aoData : JSON.stringify(aoData)
- },
- "success" : function(resp) {
- fnCallback(resp);
- }
- });
- }
- });
- }}
后台action返回json格式数据,action方法对应如下内容
- response.setCharacterEncoding("UTF-8");
- PrintWriter out = null;
- String json = null; // 返回的json数据
- try
- {
- out = response.getWriter();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- String statName = null;
- String sEcho = "0";// 记录操作的次数 每次加1
- String iDisplayStart = "0";// 起始
- String iDisplayLength = "10";// size
- int count = 0; //查询出来的数量
- String aoData = request.getParameter("aoData");
- //获取jquery datatable当前配置参数
- JSONArray jsonArray = JSONArray.fromObject(aoData);
- for (int i = 0; i < jsonArray.size(); i++)
- {
- try
- {
- JSONObject jsonObject = (JSONObject)jsonArray.get(i);
- if (jsonObject.get("name").equals("sEcho"))
- sEcho = jsonObject.get("value").toString();
- else if (jsonObject.get("name").equals("iDisplayStart"))
- iDisplayStart = jsonObject.get("value").toString();
- else if (jsonObject.get("name").equals("iDisplayLength"))
- iDisplayLength = jsonObject.get("value").toString();
- else if (jsonObject.get("name").equals("statId"))
- statName = jsonObject.get("value").toString();
- }
- catch (Exception e)
- {
- break;
- }
- }
- JSONArray jsonArray2 = new JSONArray();
- JSONObject jsonObject2 = new JSONObject();
- StatCleanService service = new StatCleanService();
- //为操作次数加1
- int initEcho = Integer.parseInt(sEcho) + 1;
- count = service.getStatCleanRevampCount(statName);//总记录数
- List statFailList = service.getStatCleanRevampList(Integer.parseInt(iDisplayStart), Integer.parseInt(iDisplayLength), statName);
- for (Object object : statFailList)
- {
- StatCleanRevampNoticeTable table = (StatCleanRevampNoticeTable)object;
- jsonObject2.put("statCleanRevampId", table.getStatCleanRevampId());
- jsonObject2.put("statCleanId", table.getStatCleanId());
- jsonObject2.put("statId", table.getStatId());
- jsonObject2.put("statName", table.getStatName());
- jsonObject2.put("revampStatus", table.getRevampStatus());
- jsonObject2.put("problemDes", table.getProblemDes());
- jsonArray2.add(jsonObject2);
- }
- json = "{\"sEcho\":" + initEcho + ",\"iTotalRecords\":" + count + ",\"iTotalDisplayRecords\":" + count + ",\"aaData\":" + jsonArray2.toString() + "}";
- //传到页面
- out.println(json);
- out.close();
其中参数
- sEcho,iTotalRecords,iTotalDisplayRecords,aaData名称是固定的,不能修改;
- iDisplayStart,iDisplayLength为每次查询的起始记录和长度;
加载页面url链接-->load form-->指向分页的action-->json数据返回给页面
效果图如下:
相关推荐
- **Ajax加载**:支持异步加载数据,无需一次性加载整个表格,减少页面加载时间。 - **自定义样式**:提供多种预设样式和主题,也可以根据需求自定义样式。 - **API和扩展**:通过其丰富的API,开发者可以实现更复杂...
jQuery分页的基本思想是通过JavaScript动态加载或隐藏Table中的数据行,以实现分页显示。通常会结合后端接口获取数据,根据每页显示的数据量来划分页码,用户点击页码时,发送请求获取对应页的数据,并更新Table内容...
在这个“jquery表格插件带分页动态数据表格代码”项目中,我们重点探讨的是如何利用jQuery实现一个功能丰富的表格,包括数据分页和动态加载。 一、jQuery表格插件 表格插件通常是基于jQuery构建的,用于增强HTML...
在本示例中,我们关注的是使用jQuery和DataTables库创建一个带有分页功能的动态数据表格。这个压缩包"jQuery json带分页的动态数据表格代码.zip"包含了一个简单的JavaScript实现,它演示了如何从JSON文件中获取数据...
5. **等待显示(Loading动画)**:在数据加载过程中,JQuery可以用来添加等待效果,如显示加载指示器或遮罩层,以告知用户系统正在处理请求。这可以通过CSS和JQuery的动画功能实现,通常在AJAX请求开始时显示,请求...
jQuery DataTables 是一个流行的JavaScript库,用于将HTML表格转化为功能丰富的数据网格,具有排序、过滤...在实际应用中,可能还需要考虑数据的异步加载、列的动态添加和删除、以及各种用户交互事件的处理等高级功能。
`<thead>`用于定义表头,`<tbody>`存放数据行,`<tfoot>`可以用来添加页码或分页控制。 2. **数据绑定**:数据通常来源于服务器,通过Ajax异步请求获取。使用jQuery的`$.ajax`或者`$.getJSON`方法来获取JSON格式的...
这里,`#example`是表格的ID,`processing`和`serverSide`选项表示Datatables将处理数据加载和分页,而`ajax`参数指定了数据源。 2. **Ajax数据源**:在示例中,数据源是"data.txt"。通常,这会是一个服务器端的...
jQuery分页插件是网页开发中常用的一种工具,主要用于处理大量数据的展示,避免一次性加载过多内容导致页面响应变慢或用户体验下降。在网页中,如电商产品列表、论坛帖子等场景,通常会采用分页的方式,让用户按需...
- **数据源支持**:DataTables支持多种数据源,包括DOM(直接从HTML表格获取数据)、Ajax(异步加载数据)、服务器端处理(仅发送请求参数,服务器返回处理后的数据)以及JSON、XML等多种数据格式。 - **排序功能**...
对于动态数据,通常使用Ajax进行异步加载。 3. **与后端技术的结合**: - Java:在Java环境中,开发者可以使用诸如Spring MVC、Struts2等框架,配合JSON或者XML格式来传输数据,DataTables会自动处理这些数据并...
本篇文章将详细讲解如何利用jQuery实现无刷新分页、AJAX数据加载、排序以及查找功能。 一、jQuery分页 jQuery分页功能允许用户在大量数据中轻松浏览,无需每次加载整个页面。它通过创建一系列链接或按钮来表示不同...
本资源提供的插件`fnReloadAjax`是针对`DataTables`的一个增强功能,它使得在不刷新整个页面的情况下,能够重新加载表格中的数据,这对于实时更新或者异步获取数据的场景尤为重要。 `DataTables`本身支持Ajax数据源...
在分页动态数据表格的实现中,jQuery通常会结合Ajax技术来实现数据的异步加载。Ajax,即Asynchronous JavaScript and XML,它允许网页在后台与服务器交换数据并更新部分网页内容,而无需重新加载整个页面。通过发送...
上述描述和示例代码中,展示了如何通过这些步骤将DataTables表格插件和jQuery UI Dialog对话框组件结合使用,以实现网页上的动态数据操作和用户交互功能。通过这种方式,开发者可以构建出既美观又实用的交互式Web...
在jQuery中,我们通常使用`.ajax()`方法发送异步请求,获取服务器端的分页数据,然后使用DOM操作来动态更新页面上的内容。 接下来是排序功能。在表格数据展示中,用户往往希望可以按列进行升序或降序排序。jQuery...
- **jQuery DataTables**:不仅支持分页,还包含排序、搜索等功能,是一个强大的数据表格管理插件。 - **Bootstrap-Pagination**:基于Bootstrap框架的分页插件,具有良好的响应式设计。 - **jQuery Paginate**:...
当页面加载或Ajax请求返回数据时,dataTables会自动填充表格内容并根据配置实现分页功能。同时,dataTables还提供了事件监听和自定义回调函数,允许开发者在用户与表格交互时执行额外的逻辑,比如在点击某行数据时...
总的来说,JQuery DataTables 的服务器端分页允许高效地处理大量数据,减轻客户端的负担,同时提供了丰富的定制化选项以适应各种需求。正确配置和使用服务器端分页,对于提升Web应用的用户体验和性能至关重要。
而Ajax分页则是在用户切换页面时,通过异步请求获取所需页面的数据,这种方式对大数据量的处理更为友好,因为它减少了初次加载时的数据量,同时保证了页面的流畅性。 关于样式支持,不同的jQuery分页插件提供了多样...