dataTables使用ajax请求显示数据
dataTables是一种很好用前端表格显示库。当加载大量数据时,可以用Ajax 获取数据来提高效率,增速网页加载速率。下面以一个例子作示范。
首先,需要下载jQuery以及dataTables库。这里使用的是版本是jquery v1.11.3和DataTables 1.10.9。下载网址:http://datatables.NET/。
先上网页的代码。要注意的是,table中的thead和tbody必须要有。
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <head>
- <link href="http://www.zhuhaihengxin.com/libs/datatables/1.10.0/css/jquery.dataTables.css" rel="stylesheet">
- <title>dataTable example</title>
- <script type="text/javascript" src="jquery.js"></script>
- <script type="text/javascript" src="jquery.dataTables.js"></script>
- <script type="text/javascript">
- $(document).ready(function() {
- $("#datatable").dataTable({
- "processing" : true,
- "serverSide" : true,
- "paginationType":"full_numbers",
- "ajax" : "load",
- "columns" : [
- {"data" : "id"},
- {"data" : "firstName"},
- {"data" : "lastName"}
- ]
- });
- });
- </script>
- <style>
- h2{
- text-align:center;
- }
- div {
- float: left;
- margin: 10px;
- padding: 4px;
- }
- a{
- margin:5px;
- }
- table,tr,td,th{
- border:2px solid #3aec7b;
- border-collapse:collapse;
- }
- </style>
- </head>
- <body>
- <TABLE id="datatable">
- <THEAD>
- <tr>
- <th>ID</th>
- <th>First Name</th>
- <th>Last Name</th>
- </tr>
- </THEAD>
- <tbody>
- </tbody>
- </TABLE>
- </body>
- </html>
当网页加载的时候,ajax发出请求,如下所示。
- draw=[1]
- columns[0][data]=[id]
- columns[0][name]=[]
- columns[0][searchable]=[true]
- columns[0][orderable]=[false]
- columns[0][search][value]=[]
- columns[0][search][regex]=[false]
- columns[1][data]=[firstName]
- columns[1][name]=[]
- columns[1][searchable]=[true]
- columns[1][orderable]=[true]
- columns[1][search][value]=[]
- columns[1][search][regex]=[false]
- columns[2][data]=[lastName]
- columns[2][name]=[]
- columns[2][searchable]=[true]
- columns[2][orderable]=[true]
- columns[2][search][value]=[]
- columns[2][search][regex]=[false]
- order[0][column]=[0]
- order[0][dir]=[asc]
- start=[0]
- length=[10]
- search[value]=[]
- search[regex]=[false]
- _=[1441278114568]
其中,draw是请求的序号,start是数据的偏移量,length是需要返回的最大数据条数。search[value]是查找的值。
服务端采用Java的servlet完成。为简单起见,这里直接采用继承HttpServlet的方式实现。数据本应该从数据库中提取,但这里为了简单,生成了静态数据集合作为数据源。每次请求都从集合中查找匹配的数据,然后转换成JSON返回。JSON库采用阿里的fastjson。
代码如下所示。
- package jspTest;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Enumeration;
- import java.util.LinkedList;
- import java.util.Random;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import java.util.List;
- import java.util.Map;
- /**
- * Servlet implementation class DataLoad
- */
- public class DataLoad extends HttpServlet {
- private static final long serialVersionUID = 1L;
- static class Person {
- private long id;
- private String firstName;
- private String lastName;
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- public String getFirstName() {
- return firstName;
- }
- public void setFirstName(String firstName) {
- this.firstName = firstName;
- }
- public String getLastName() {
- return lastName;
- }
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
- public boolean match(String pattern) {
- return firstName.contains(pattern) || lastName.contains(pattern) || Long.toString(id).contains(pattern);
- }
- }
- private static Random r = new Random();
- private static List<Person> ps = new ArrayList<Person>();
- static {
- int size = 2512;
- for (int k = 0; k < size; ++k)
- ps.add(generatePerson());
- }
- static Person generatePerson() {
- Person p = new Person();
- p.setId(ps.size() + 1);
- p.setFirstName(generateName());
- p.setLastName(generateName());
- return p;
- }
- private static String generateName() {
- StringBuilder sb = new StringBuilder();
- sb.append((char) (r.nextInt(26) + 'A'));
- int len = 2 + r.nextInt(4);
- for (int k = 0; k < len; ++k)
- sb.append((char) (r.nextInt(26) + 'a'));
- return sb.toString();
- }
- private List<Person>result;
- public List<Person>getResult(){
- return result;
- }
- /**
- * @see HttpServlet#HttpServlet()
- */
- public DataLoad() {
- super();
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
- * response)
- */
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- int start=0;
- int length=10;
- String pattern="";
- String draw="1";
- Map<String,String[]>params=request.getParameterMap();
- for(String attr:params.keySet()){
- String[] val=params.get(attr);
- System.out.println(attr+"="+Arrays.toString(val));
- if(attr.equals("start"))
- start=Integer.parseInt(val[0]);
- if(attr.equals("length"))
- length=Integer.parseInt(val[0]);
- if(attr.equals("search[value]"))
- pattern=val[0];
- if(attr.equals("draw"))
- draw=val[0];
- }
- int total=filter(start, length, pattern);
- JSONObject obj = new JSONObject();
- obj.put("draw", draw);
- obj.put("recordsTotal", ps.size());
- obj.put("recordsFiltered", total);
- System.out.println(obj.toJSONString());
- obj.put("data", result);
- response.getWriter().println(obj.toJSONString());
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
- * response)
- */
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- private int filter(int start,int length,String pattern){
- result=new LinkedList<Person>();
- int total=0;
- for(Person s:ps){
- if(!s.match(pattern))
- continue;
- ++total;
- if(start-->0)
- continue;
- if(length--<=0)
- continue;
- result.add(s);
- }
- return total;
- }
- public static void main(String[] rags) {
- System.out.println(JSON.toJSONString(ps));
- DataLoad load=new DataLoad();
- load.filter(0, 10, "");
- System.out.println(JSON.toJSONString(load.getResult()));
- load.filter(0, 10, "a");
- System.out.println(JSON.toJSONString(load.getResult()));
- load.filter(10, 10, "a");
- System.out.println(JSON.toJSONString(load.getResult()));
- load.filter(20, 10, "a");
- System.out.println(JSON.toJSONString(load.getResult()));
- }
- }
服务端返回的JSON数据如下所示。其中draw是请求中的draw参数,data是表格中的数据。recordsFiltered是过滤后的数据总数,recordsTotal是原始数据总数。
- {"recordsFiltered":2512,
- "data":[{"firstName":"Bzf","id":1,"lastName":"Hazkm"},{"firstName":"Imxi","id":2,"lastName":"Oieb"},{"firstName":"Glyag","id":3,"lastName":"Gvqlf"},{"firstName":"Lwbhl","id":4,"lastName":"Fvvf"},{"firstName":"Audds","id":5,"lastName":"Seunp"},{"firstName":"Otbrq","id":6,"lastName":"Hnal"},{"firstName":"Loji","id":7,"lastName":"Qicn"},{"firstName":"Rjy","id":8,"lastName":"Emrygr"},{"firstName":"Gcglkd","id":9,"lastName":"Ldgrs"},{"firstName":"Txh","id":10,"lastName":"Qwe"}],
- "draw":"1",
- "recordsTotal":2512}
返回数据后,网页如下所示。
dataTables使用ajax请求显示数据的更多相关文章
- Ajax请求后台数据
一.前期准备 安装好XAMPP软件,并运行起来.本文代码是基于XAMPP开发环境,XAMPP是完全免费且易于安装的Apache发行版,其中包含MariaDB.PHP和Perl.XAMPP开放源码包的设 ...
- ajax请求返回数据,模板中的数据处理
/*ajax请求返回数据,模板中的数据处理*/ function QueryGameAsset(){ var new_start_time=$('#new_start_time').val();//开 ...
- 关于使用Ajax请求json数据,@RequestMapping返回中文乱码的几种解决办法
一.问题描述: 使用ajax请求json数据的时候,无论如何返回的响应编码都是ISO-8859-1类型,因为统一都是utf-8编码,导致出现返回结果中文乱码情况. $.ajax({ type:&quo ...
- 前台返回json数据的常用方式+常用的AJAX请求后台数据方式
我个人开发常用的如下所示: 之所以像下面这样下,一是前台Ajax,二是为安卓提供接口数据 现在常用的是返回JSON数据,XML的时代一去不复返 JSON相对于XML要轻量级的多 对JSON不是十分熟悉 ...
- JS 操作 HTML 和 AJAX 请求后台数据
为某个元素插入值,添加属性,添加子元素 <div class="col-sm-6"> <select class="form-control" ...
- jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法
jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...
- 关于前端ajax请求获取数据成功之后无法操作数据的原因及解决方法
前言:做项目的时候我用ajax请求json数据,遍历使用数据时却发现页面无响应.关于这个问题今天有个朋友又问了我一次,记录一下.由于我没有记录,这里用我朋友的图片. 代码现象: 这里他是使用alert ...
- bootstrap通过ajax请求JSON数据后填充到模态框
1. JSP页面中准备模态框 <!-- 详细信息模态框(Modal) --> <div> <div class="modal fade" id=& ...
- AJAX请求提交数据
1,AJAX准备知识:JSON JSON指的是JavaScript对象表示方法(JavaScript Object Notation) JSON是轻量级的文本数据交换格式 JSON独立于语言 JSON ...
随机推荐
- WWDC2014苹果的“软件”发布会
WWDC 2014 苹果的"软件"发布会 在今年的 6 月 2 日到 6 日,苹果照例举行了一年一次的全球开发者大会(World Wide Developer Conference ...
- 一套Tomcat处理多个域名请求 - Virtual Host
最近和Tomcat较上劲了... 作为Tomcat的系列之一,来尝试下如何用一套Tomcat来处理多个域名请求. 场景:基于成本考虑,多个department共用一台服务器,然后该服务器上就一套Tom ...
- iOS用户是否打开APP通知开关跳转到系统的设置界面
1.检测用户是否打开推送通知 /** 系统通知是否打开 @return 是否打开 */ //检测通知是否打开iOS8以后有所变化 所以需要适配iOS7 + (BOOL)openThePushNoti ...
- EasyDarwin做转发延时太大?
很多人反映,在用EasyDarwin做流媒体转发服务时,延时太大,实际Darwin在转发模块中,有一个控制转发Buffer时间的配置reflector_buffer_size_sec,我们将这个配置改 ...
- 红黑树深入剖析及Java实现(转自知乎美团点评技术团队)
作者:美团点评技术团队 链接:https://zhuanlan.zhihu.com/p/24367771 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 红黑树是平衡 ...
- difference between http get and post
1 用get的地方 在浏览器中输入url直接访问资源时,用get.get是通过url传参的. 2 用post的地方 2.1 url长度超限时 post是将参数放在http body中的,因此对参数的长 ...
- ElasticSearch(十三) bulk api奇特的json格式的原因
bulk api的语法 正常的语法: {"action": {"meta"}}\n {"data"}\n {"action&quo ...
- mongodb学习之:副本集
前面一张介绍了主从模式,现在mongoDB官方已经不建议使用主从模式了,替代方案是采用副本集的模式.副本集不能在一台电脑上操作.需要准备3台电脑进行搭建.副本集就是mongoDB副本所组成的一个集群. ...
- Uninstall Tool3.5.3
2.卸载所有和MySQL相关的程序,有好几个,注意,一定要删除与MySQL相关的所有的数据,不能用MySQL自带的卸载,我是用Uninstall Tool3.5.3,在卸载程序界面,右键选择与MySQ ...
- php MVC原理
一直用php的mvc模式,但是一直没深入研究其原理性的东西,今天把最基本的mvc原理模型总结如下: 1.url访问方式 http://127.0.0.1:8080/ceshi.com/index.p ...