当前位置: 首页 > news >正文

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' οnclick='toManagerCouponData("+info.branch_id+")'/>" 
                       +" </td>"
                       +" </tr>";
                   }
                  $(".ins").append(html);
            },
            error:function(e){
                alert("错误");
            }
        });
}

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

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

 

转载于:https://www.cnblogs.com/angto64/p/5274616.html

相关文章:

  • BZOJ 1565 植物大战僵尸(最大权闭合图)
  • UVa 1586 - Molar mass
  • 072:【Django数据库】ORM聚合函数详解-aggregate和annotate
  • 配置ssh的双机信任
  • hdfs远程连接异常
  • linux if 命令判断条件总结
  • 【M15】了解异常处理(exception handling)的成本
  • 【代码】模板实现双向链表的去重、拼接、合并、排序
  • Netflix Media Database - 架构设计和实现
  • 又拍云引领云CDN加速 或成互联网刚性需求
  • Genymotion常见问题整合与解决方案(转)
  • 用webmagic实现一个java爬虫小项目
  • 化工文件下载地址
  • 搭建K8S高可用集群(二进制方式)
  • 20160309作业
  • 10个最佳ES6特性 ES7与ES8的特性
  • Django 博客开发教程 16 - 统计文章阅读量
  • Effective Java 笔记(一)
  • Facebook AccountKit 接入的坑点
  • k8s如何管理Pod
  • Redis的resp协议
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 飞驰在Mesos的涡轮引擎上
  • 分类模型——Logistics Regression
  • 简析gRPC client 连接管理
  • HanLP分词命名实体提取详解
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #QT(一种朴素的计算器实现方法)
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (新)网络工程师考点串讲与真题详解
  • (一)基于IDEA的JAVA基础10
  • (转)大型网站架构演变和知识体系
  • ***测试-HTTP方法
  • . Flume面试题
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net(C#)中String.Format如何使用
  • .net访问oracle数据库性能问题
  • .net解析传过来的xml_DOM4J解析XML文件
  • @基于大模型的旅游路线推荐方案
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [Android] Amazon 的 android 音视频开发文档