分页技术分为后端分页和前端分页。

前端分页
将数据一次性全部取出来,然后通过js进行分页,有其弊端:假设有商品表dbgoods,存放99999万条数据 ,执行查询语句
select *from dbgoods where 1=1 将查询结构用List<goods>list 进行接收,服务端将这么庞大的数据量传递给前端,会造成下载量大(流量都是钱),服务器压力大等。
后端分页
后端分页是每次请求只查询一页的值,以mysql为例(查询第一条开始,查询8条)
select * from dbgoods order by id limit 0,8;
后端同步分页
原理:需要有个Bean记录分页的信息,
public class PageBean{
private long total; //总记录数
private List<T> list; //结果集
private int pageNum; // 第几页
private int pageSize; // 每页记录数
private int pages; // 总页数
private int size; // 当前页的数量 <= pageSize,该属性来自ArrayList的size属性
当我们首次加载时,加载的是第一页的分页数据:
值得注意的是
以前我是这样编写sql语句得到总条数的:
select *from dbgoods ; //用Lits<goods> lists去存储 得到的数据,如果数据有几万条, //为了得到一个数字,去开辟这么大的空间,实属浪费 PageBean page=new PageBean(); page.setTotal=lists.size();
其实正确的打开方式是:
select count(*) from dbgoods where 1=1 ; //查询语句返回的是一个表的总记录数,int型, //where 1==1是为了查询搜索,做sql语句拼接
同步实现异步,从jsp界面传递currentpage参数到servlet,servlet通过request请求得到参数,通过dao层数据库查询后将数据再传会到jsp界面。
浏览器看到的界面效果是:jsp--->servlet----->jsp(跳转,用户体验不好)
如果有搜索框,在进行搜索分页时,点击搜索按钮,等到查询数据传递到jsp界面时,jsp已经是个全新的页面,搜索框里的文本框内容已经消失,解决方法就是在点击搜索的时候,将文本框的值也放在request请求,一起发给servlet,再通过servlet传递到新的jsp (超级繁琐)
两种解决方法:
(1)做两个界面一样的,一个用于显示全部数据情况下的分页,当点击查询时,得到数据后用另外的页面(下一页点击事件是去执行搜索的情况)去显示
(2)使用session:当点击搜索查询时,将搜索条件记录在session里面,当点击下一页时,去判断session的值,如果是空,则执行全部数据的下一页,如果不为空,则将session的值取出来,作为查询的条件,下一页执行 有搜索条件的查询语句。麻烦点:session的销毁不好控制,容易bug
总之,用同步实现分页,会有各种不开心
Ajax异步分页
//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="<th><input id='cb_all' type='checkbox'></th>"
+"<th>ID</th>"
+"<th>客户名称</th>"
+"<th>公司名称</th>"
+"<th>联系人</th>"
+"<th>性别</th>"
+"<th>联系电话</th>"
+"<th>手机</th>"
+"<th>QQ</th>"
+"<th>电子邮箱</th>"
+"<th>通讯地址</th>"
+"<th>创建时间</th>";
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><input type='checkbox'></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);
}
}
初次加载时,默认调用
//初始化表格
InitTable(1);
值得注意的是,重点来了:
我们进行搜索的时候,定义一个全局的变量mydata,作用域为page
var mydata="";
下面看下点击 搜索按钮的事件代码
btns.eq(1).click( //搜索按钮点击事件
function()
{
//custom_dialog_form是搜索的form表单,将其搜索条件序列化后赋值给一个全局变量 mydata=$("#custom_dialog_form").serialize();
$.ajax({
type:"post",
url:"CustomServlet?type=search¤tpage=1",
async:true,
dataType:"json",
data:mydata, //传递数据
success:function(data)
{
DrawTable(data);
$("#custom_dialog").css("display","none");
}
});
}
);
解决同步的搜索情况下的下一页访问到的是全部数据的下一页问题:
function InitTable(currentpage) //无搜索条件下的查询,传递一个页码
{
$.ajax({
type:"get",
url:"CustomServlet?type=search¤tpage="+currentpage,
async:true,
dataType:"json",
success:function(data)
{
DrawTable(data);
}
});
}
function InitTableSearch(currentpage)//有搜索添加的查询,传递页码
{
$.ajax({
type:"post",
url:"CustomServlet?type=search¤tpage="+currentpage,
async:true,
dataType:"json",
data:mydata,
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); //进行条件搜索
}
}
});
由于是异步刷新,所以全局变量mydata是有值的,手动自己刷新页面重新加载,mydata就会初始化为空,就又默认执行 无条件搜索语句。巧妙的解决了搜索和显示全部的下一页问题,上一页首页尾页同理。
总结
以上所述是小编给大家介绍的JS分页的实现(同步与异步),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
# js
# 分页的实现
# JavaScript事件循环同步任务与异步任务
# js前端面试之同步与异步问题详解
# JS同步、异步、延迟加载的方法
# JavaScript文件的同步和异步加载的实现代码
# 浅谈js文件引用方式及其同步执行与异步执行
# 同步异步动态引入js文件的几种方法总结
# 不同js异步函数同步的实现方法
# JavaScript同步与异步任务问题详解
# 分页
# 下一页
# 的是
# 后端
# 加载
# 为空
# 全局变量
# 解决方法
# 小编
# 当前页
# 文本框
# 都是
# 情况下
# 我是
# 就会
# 是个
# 来了
# 会有
# 放在
# 有个
相关文章:
如何在万网开始建站?分步指南解析
制作国外网站的软件,国外有哪些比较优质的网站推荐?
定制建站价位费用解析与套餐推荐全攻略
电商平台网站制作流程,电商网站如何制作?
如何在IIS7中新建站点?详细步骤解析
建站之星备案是否影响网站上线时间?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
音乐网站服务器如何优化API响应速度?
如何快速查询网址的建站时间与历史轨迹?
如何在IIS服务器上快速部署高效网站?
如何在宝塔面板中创建新站点?
湖北网站制作公司有哪些,湖北清能集团官网?
建站之星安装模板失败:服务器环境不兼容?
建站三合一如何选?哪家性价比更高?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
定制建站流程解析:需求评估与SEO优化功能开发指南
建站中国官网:模板定制+SEO优化+建站流程一站式指南
岳西云建站教程与模板下载_一站式快速建站系统操作指南
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在阿里云服务器自主搭建网站?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
如何在云虚拟主机上快速搭建个人网站?
深圳网站制作的公司有哪些,dido官方网站?
如何在阿里云香港服务器快速搭建网站?
如何制作网站标识牌,动态网站如何制作(教程)?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
建站之星价格显示格式升级,你的预算足够吗?
定制建站方案优化指南:企业官网开发与建站费用解析
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
5种Android数据存储方式汇总
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何用PHP快速搭建高效网站?分步指南
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
建站之星会员如何解锁更多建站功能?
非常酷的网站设计制作软件,酷培ai教育官方网站?
建站之星如何一键生成手机站?
如何在Windows环境下新建FTP站点并设置权限?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
建站之星如何实现五合一智能建站与营销推广?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
TestNG的testng.xml配置文件怎么写
C#怎么创建控制台应用 C# Console App项目创建方法
简历在线制作网站免费版,如何创建个人简历?
如何在企业微信快速生成手机电脑官网?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
教学网站制作软件,学习*后期制作的网站有哪些?
手机网站制作与建设方案,手机网站如何建设?
代刷网站制作软件,别人代刷火车票靠谱吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。