JS分页的实现(同步与异步)
前端之家 收集整理的这篇文章主要介绍了
JS分页的实现(同步与异步) ,
前端之家 小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301 _0@分页 技术分为后端分页 和前端分页 。
@H_
301 _0@
@H_
301 _0@将数据一次性全部取出来,然后通过js进行
分页 ,有其弊端:假设有商品表dbgoods,存放99999万条数据 ,执行
查询 语句
select from dbgoods where 1=1
将
查询 结构用
Listlist
进行接收,服务端将这么庞大的数据量传递给前端,会造成下载量大(流量都是钱),服务器压力大等。
@H_
301 _0@
@H_
301 _0@后端
分页 是每次请求只
查询 一页的值,以
MysqL 为例(
查询 第一条开始,
查询 8条)
<div class="jb51code">
<pre class="brush:js;">
select from dbgoods order by id limit 0,8;
@H_
301 _0@
@H_
301 _0@原理:需要有个Bean记录
分页 的信息,
list; //结果集
private int pageNum; // 第几页
private int pageSize; // 每页记录数
private int pages; // 总页数
private int size; // 当前页的
数量 <= pageSize,该
属性 来自ArrayList的size
属性
@H_
301 _0@当我们首次加载时,加载的是第一页的
分页 数据:
@H_
301 _0@
值得注意的是
@H_
301 _0@以前我是这样编写
sql 语句得到总条数的:
lists去存储 得到的数据,如果数据有几万条,
//为了得到一个数字,去开辟这么大的空间,实属浪费
PageBean page=new PageBean();
page.setTotal=lists.size();
@H_
301 _0@其实正确的打开方式是:
查询语句返回的是一个表的总记录数,int型,
//where 1==1是为了
查询 搜索 ,做
sql 语句拼接
@H_
301 _0@同步实现异步,从jsp界面传递currentpage参数到servlet,servlet通过request请求得到参数,通过dao层
数据库 查询 后将数据再传会到jsp界面。
@H_
301 _0@浏览器看到的界面
效果 是:jsp--->servlet----->jsp(
跳转 ,
用户 体验不好)
@H_
301 _0@如果有
搜索 框,在进行
搜索 分页 时,点击
搜索 按钮,等到
查询 数据传递到jsp界面时,jsp已经是个全新的
页面 ,
搜索 框里的文本框
内容 已经消失,
解决方法 就是在点击
搜索 的时候,将文本框的值也放在request请求,一起发给servlet,再通过servlet传递到新的jsp (超级繁琐)
@H_
301 _0@
@H_
301 _0@(1)做两个界面一样的,一个用于
显示 全部数据情况下的
分页 ,当点击
查询 时,得到数据后用另外的
页面 (
下一页 点击事件是去执行
搜索 的情况)去
显示
@H_
301 _0@(2)使用session:当点击
搜索 查询 时,将
搜索 条件记录在session里面,当点击
下一页 时,去判断session的值,如果是空,则执行全部数据的
下一页 ,如果不为空,则将session的值取出来,作为
查询 的条件,
下一页 执行 有
搜索 条件的
查询 语句。麻烦点:session的销毁不好控制,容易bug
@H_
301 _0@总之,用同步实现
分页 ,会有各种不开心
@H_
301 _0@
Ajax异步分页
<div class="jb51code">
<pre class="brush:js;">
//jsp界面一个函数 ,传递查询 页码 ,绘制表格
function InitTable(currentpage)
{
$.ajax({
type:"get",url:"CustomServlet?type=search¤tpage="+currentpage,async:true,dataType:"json",success:function(data)
{
DrawTable(data); //绘制表格
}
});
}
function DrawTable(data) //根据传递过来的json绘制表格
{
//给总页数赋值
$("#custom_all").text(data.pagelist.total);
//给当前页赋值
$("#custom_currunt_page").text(data.pagelist.pageNum);
//给总页数赋值
$("#custom_all_page").text(data.pagelist.pages);
var _th="
"
+"
ID "
+"
客户名称 "
+"
公司名称 "
+"
联系人 "
+"
性别 "
+"
联系电话 "
+"
手机 "
+"
QQ "
+"
电子邮箱 "
+"
通讯地址 "
+"
创建时间 ";
document.getElementsByTagName("tbody")[0].innerHTML=_th;
for(var i=0;i<data.pagelist.list.length;i++)
{
var customerCreatetime= format(data.pagelist.list[i].customerCreatetime,'yyyy-MM-dd');
var _tr=document.createElement('tr');
msg="<td>
</td><td>"+data.pagelist.list[i].customerId+"</td><td>"+data.pagelist.list[i].customerName+"</td><td>"+data.pagelist.list[i].customerCompanyname+"</td><td>"+data.pagelist.list[i].customerContactname+"</td><td>"+data.pagelist.list[i].customerSex+"</td><td>"+data.pagelist.list[i].customerTelephone+"</td><td>"+data.pagelist.list[i].customerPhone+"</td><td>"+data.pagelist.list[i].customerQq+"</td><td>"+data.pagelist.list[i].customerEmail+"</td><td>"+data.pagelist.list[i].customerAddress+"</td><td>"+customerCreatetime+"</td>"
_tr.innerHTML=msg;
document.getElementsByTagName("tbody")[0].appendChild(_tr);
}
}
搜索按钮点击事件
function()
{
//custom_dialog_form是
搜索 的form表单,将其
搜索 条件序列化后赋值给一个
全局变量 mydata=$("#custom_dialog_form").serialize();
$.ajax({
type:"post",url:"CustomServlet?type=search¤tpage=1",data:mydata,//传递数据
success:function(data)
{
DrawTable(data);
$("#custom_dialog").css("display","none");
}
});
}
);
搜索条件下的
查询 ,传递一个
页码
{
$.ajax({
type:"get",success:function(data)
{
DrawTable(data);
}
});
}
function InitTableSearch(currentpage)//有
搜索 添加 的
查询 ,传递
页码
{
$.ajax({
type:"post",success:function(data)
{
DrawTable(data);
$("#custom_dialog").css("display","none");
}
});
}
//
下一页
$("#custom_btn_next").click(
function ()
{
var currentpage=$("#custom_currunt_page").text(); //
获取 页面 的当前页的值
var pages=$("#custom_all_page").text(); //
获取 总页数
currentpage++;
if(currentpage<=pages)
{
if(mydata=="") //判断
全局变量 mydata是否为空,空表示没有进行
搜索 查询
{
InitTable(currentpage);
}
else
{
InitTableSearch(currentpage); //进行条件
搜索
}
}
});