问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么使用ajax为 datatables 获取数据7

发布网友 发布时间:2023-10-02 15:51

我来回答

1个回答

热心网友 时间:2024-11-19 10:32

dataTables是一种很好用前端表格显示库。当加载大量数据时,可以用Ajax 获取数据来提高效率,增速网页加载速率。下面以一个例子作示范。

首先,需要下载jquery以及dataTables库。这里使用的是版本是jQuery v1.11.3和DataTables 1.10.9。下载网址:http://datatables.net/。

先上网页的代码。要注意的是,table中的thead和tbody必须要有。

[html] view plaincopy
<!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发出请求,如下所示。
[html] view plaincopy
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。

代码如下所示。

[java] view plaincopy
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是原始数据总数。
[html] view plaincopy
{"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}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 datatables 怎么拿到ajax的数据 ( )负担 负担( ) 在( )中填词 华为mate40pro有多重? 2012上海钻石联赛在哪里比? 魔兽争霸 怎么回城 鱼缸过滤桶应该放什么滤材26 我想买台二手电脑 看了好多我看上了这个你们说这个配置1600... 福建三明特产有哪些.?14 上海碧云钻石酒店公寓在哪个位置 - -淘宝上关于有很多宾得KR 套机 是 18-55 +55...1 女朋友的表妹结婚去吃酒,怎样跟女朋友聊天?4 斗鱼冬天怎么办100 咸菜如何腌制?385 北京林业大学周围有什么特色酒店 福建省三明市的土特产有什么?11 我今年46岁,男性,体重60公斤。 高压110,低压55,脉... ipod classi 推森海塞尔HD598,推得好吗?7 吉林大学工商管理学院好吗?就业前途怎么样?1 下肢动脉硬化闭塞症已几年住院也不见好请问用艾灸 怎样腌制咸菜338 关于鱼和水生意兴隆的对联1 做鱼生意的对联大全1 北京现代瑞纳的各个档位怎么使用73 北京现代自动挡怎么开76 北京现代自动挡汽车怎么开,手动挡的会开,求教??6 请问北京林业大学附近酒店哪家实惠2 三明有哪些特产15 普通发票管理系统保存后如何打开? 试用期期间辞职工资如何算? 不锈钢水盆生锈了怎么办100 360桌面壁纸保存在哪个文件夹里?387 护士可以有纹身吗?会被脱衣服体检吗?65 护士可以有纹身吗?13 出门在外的人必定要赶回家来,吃团圆饭这句话中的必定说明了-8 除夕夜赶回家吃团圆饭这是什么古诗1 求几套怪物猎人P3上位大剑混装,并且护石要求不要太高(例如什...75 苏州伟泰环保工程有限公司怎么样? 怎样用中性树脂封片?3 一篇关于北极熊的英文介绍339 怪物猎人P3大剑控 求几套最强大剑极限装备!368