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分页,且通用性高,需要改动的地方不多

原文地址:https://www.cnblogs.com/angto64/p/5274616.html