zoukankan      html  css  js  c++  java
  • mysql分页(ajax)

    分页有多种方式,mysql的limit是个不错的选择,通过ajax实现异步刷新,将当前页数和每页数量传入后台即可

    1. 首先后台要拿到总记录数和所需显示数据列表,所以要分别写两个sql方法

    我这里是通过spring的注解方式写的sql,其它方法原理是一样的

        /**
         * 礼品列表(分页)
         */
        @Select("select * from t_coupons  limit ${firstnum},${maxnum}")
        public List<Coupon> list(@Param("firstnum") long firstnum,@Param("maxnum") long maxnum);
    
        /**
         * 礼品列表总条数
         */
        @Select("select count(*) from t_coupons")
        public int countlist();

    2. 再是service的处理,这里因为每条显示数量由后台控制,所以只需要传入当前页数就行,如有需要可自己加

        /**
         * 礼品列表
         */
        public List<Object> list(int pageNow) {
            //每页显示条数
            int pageNum = 5;
            //开始条数
            int beginNum = (pageNow - 1) * pageNum;
            //查询
            List<Coupon> couponDataTotal = couponDataDao.list(beginNum, pageNum);
            //总条数
            int count = couponDataDao.countlist();
            //总页数
            int allPage = PageUtil.countPageByCountAndpageNum(count, pageNum);
            //数据集合
            List<Object> list = new ArrayList<Object>();
            list.add(couponDataTotal);
            list.add(allPage);
            return list;
    
        }

    后台返回的是一个object数据,包含数据列表和总页数

    3. 接下来就是前端处理了,我同事写了一个公共js,只需要引用js和一行html即可实现上一页、下一页的控制效果和当前页数、总页数的显示,觉得很不错,所以拿来用了

    /**
     * 分页的改变
     * @param pageShowId    分页显示的id
     * @param i    (1 上一页,2 下一页,3 当前页,4 第一页)
     * @returns    操作过后的页数(当前页)
     */
    function pageChange(pageShowId,i){
        if(i == 1){
            clickUp(pageShowId);
        }else if(i == 2){
            clickNext(pageShowId);
        }else if(i == 4){
            setPageNum(pageShowId, 1, 1);
        }
        var nowPage = getPageNum(pageShowId, 1);
        return nowPage;
    }
    
    /**
     * 点击上一页的时候触发
     */
    function clickUp(pageShowId){
        var now = getPageNum(pageShowId,1);
        if(now==1){
            nowPage = 1;
        }else if(now>1){
            nowPage = parseInt(now) - 1;
        }
        setPageNum(pageShowId,1,nowPage);
    }
    
    /**
     * 点击下一页时触发
     * @param pageShowId
     * @returns
     */
    function clickNext(pageShowId){
        var now = getPageNum(pageShowId,1);
        var all = getPageNum(pageShowId,2);
        if(now==all){
                nowPage = all;
        }else if(parseInt(now)<parseInt(all)){
            nowPage = parseInt(now) + 1;
        }else{
            nowPage = 1;
        }
        setPageNum(pageShowId,1,nowPage);
    }
    
    /**
     * 获取分页(pageShowId 显示分页的id,index 1为当前页,2为总页)
     */
    function getPageNum(pageShowId,index){
        var pageText = $("#"+pageShowId+"").text();
        var strs= new Array(); //定义一数组 
        strs = pageText.split("/");
        if(index==1){
            return strs[0];
        }else if(index==2){
            return strs[1];
        }
    }
    
    /**
     * 设置分页(pageShowId 显示分页的id,index 1为当前页,2为总页,str 是要修改的字符串)
     */
    function setPageNum(pageShowId,index,str){
        var pageText = $("#"+pageShowId+"").text();
        var strs= new Array(); //定义一数组 
        strs = pageText.split("/");
        if(index==1){
            //修改当前页
            $("#"+pageShowId+"").text(str+"/"+strs[1]);
        }else if(index==2){
            //修改总页
            $("#"+pageShowId+"").text(strs[0]+"/"+str);
        }
    }

    这个js基本不用改,直接引用然后配合下面的html代码,基本通用

    4. 然后是html界面

    <div class="table-cont">
        <table width="100%" border="0" class="ins" cellspacing="0" cellpadding="0">
          <tr class="tbHead">
            <td>部门机构(支行)名称</td>
            <td>已分配</td>
            <td>价值</td>
            <td>已发放</td>
            <td>价值</td>
            <td>库存</td>
            <td>价值</td>
            <td>已领取</td>
            <td>未领取</td>
            <td>已使用</td>
            <td>未使用</td>
            <td>使用中</td>
            <td>操作</td>
          </tr>     
        </table>
      </div>
      
      <div class="pager tc">
        <input name="" type="button" value="上一页" onclick="change(1)" class="btn_prev" />
        <span id="pageShow-up" class="btn_page">1/1</span>
        <input name="" type="button" value="下一页" onclick="change(2)" class="btn_next" />
        <input name="" type="button" value="返回"  onclick="javascript:history.go(-1)" class="btn_back" />
      </div>  

    其实只有

    <span id="pageShow-up" class="btn_page">1/1</span>

    这行代码不能变,其它都是可以根据界面需求自己改的

    5. 最后就是通过ajax将当前页数传入后台即可

    //获取支行礼品统计列表
     function getBranchCouponDataList(nowPage){
          $(".remove").remove();
          $.ajax({
                url:path + "/couponData/branchCouponData",
                type:"POST",
                dataType: "json",
                data:{nowPage:nowPage},
                success:function(data){
                    //设置总页数
                    setPageNum("pageShow-up", 2, data[1]);
                     var html = '';
                      for(var i=0; i<data[0].length; i++){
                          var info = data[0][i];
                          html +=" <tr class='cl remove'>"
                           +" <td>"+info.branch_name+"</td>"
                           +" <td>"+info.puted_num+"份</td>"
                           +" <td>"+info.sum_price+"元</td>"
                           +" <td>"+info.send_num+"份</td>"
                           +" <td>"+info.send_price+"元</td>"
                           +" <td>"+info.last_num+"份</td>"
                           +" <td>"+info.last_price+"元</td>"
                           +" <td>"+info.receive_num+"份</td>"
                           +" <td>"+info.not_receive+"份</td>"
                           +" <td>"+info.used_num+"份</td>"
                           +" <td>"+info.notuse_num+"份</td>"
                           +" <td>"+info.useing_num+"份</td>"
                           +" <td>"
                           +"  <input name='' type='button' value='查看' class='btn_red' onclick='toManagerCouponData("+info.branch_id+")'/>" 
                           +" </td>"
                           +" </tr>";
                       }
                      $(".ins").append(html);
                },
                error:function(e){
                    alert("错误");
                }
            });
    }

    在加载页面时,可以默认传1也就是第一页执行此方法

    以上基本就能实现一个ajax分页,且通用性高,需要改动的地方不多

  • 相关阅读:
    Oracle函数如何把符串装换为小写的格式
    Oralce中的synonym同义词
    JS中getYear()的兼容问题
    How to do SSH Tunneling (Port Forwarding)
    所谓深度链接(Deep linking)
    upload size of asp.net
    发一个自动刷网站PV流量的小工具
    解决Visual Studio 2008 下,打开.dbml(LINQ) 文件时,提示"The operation could not be completed." 的问题。
    在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录
    使用SQL语句获取Sql Server数据库的版本
  • 原文地址:https://www.cnblogs.com/angto64/p/5274616.html
Copyright © 2011-2022 走看看