全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS分页的实现(同步与异步)

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

前端分页

将数据一次性全部取出来,然后通过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&currentpage="+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&currentpage=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&currentpage="+currentpage,
       async:true,
       dataType:"json",
       success:function(data)
       {
        DrawTable(data);
       }
      });
     }
     function InitTableSearch(currentpage)//有搜索添加的查询,传递页码
     {
       $.ajax({
        type:"post",
        url:"CustomServlet?type=search&currentpage="+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同步与异步任务问题详解  # 分页  # 下一页  # 的是  # 后端  # 加载  # 为空  # 全局变量  # 解决方法  # 小编  # 当前页  # 文本框  # 都是  # 情况下  # 我是  # 就会  # 是个  # 来了  # 会有  # 放在  # 有个 


相关文章: 如何在云服务器上快速搭建个人网站?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  建站之星上传入口如何快速找到?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  如何通过远程VPS快速搭建个人网站?  广州建站公司哪家好?十大优质服务商推荐  宝塔面板创建网站无法访问?如何快速排查修复?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  建站之星代理如何优化在线客服效率?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何在Windows 2008云服务器安全搭建网站?  如何彻底删除建站之星生成的Banner?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  建站上传速度慢?如何优化加速网站加载效率?  C++时间戳转换成日期时间的步骤和示例代码  如何在七牛云存储上搭建网站并设置自定义域名?  c++ stringstream用法详解_c++字符串与数字转换利器  SQL查询语句优化的实用方法总结  公司网站制作价格怎么算,公司办个官网需要多少钱?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  网站图片在线制作软件,怎么在图片上做链接?  如何彻底卸载建站之星软件?  建站主机与服务器功能差异如何区分?  如何在Tomcat中配置并部署网站项目?  建设网站制作价格,怎样建立自己的公司网站?  建站之星安装失败:服务器环境不兼容?  建站主机选购指南:核心配置优化与品牌推荐方案  如何生成腾讯云建站专用兑换码?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  如何制作网站标识牌,动态网站如何制作(教程)?  高防服务器如何保障网站安全无虞?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  ,柠檬视频怎样兑换vip?  高性价比服务器租赁——企业级配置与24小时运维服务  如何在IIS7中新建站点?详细步骤解析  h5网站制作工具有哪些,h5页面制作工具有哪些?  济南网站制作的价格,历城一职专官方网站?  实现虚拟支付需哪些建站技术支撑?  如何在宝塔面板中创建新站点?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  定制建站流程解析:需求评估与SEO优化功能开发指南  网站制作软件有哪些,制图软件有哪些?  制作网站怎么制作,*游戏网站怎么搭建?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  网站制作公司排行榜,四大门户网站排名?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。