PHP+JQuery+Ajax实现分页方法详解


Posted in PHP onAugust 06, 2016

本文实例讲述了PHP+JQuery+Ajax实现分页的方法。分享给大家供大家参考,具体如下:

为了锻炼下jQuery,决定自己动手写写分页

最终的效果如图:

点击某个字母后,下方显示以该字母为首字母的所有词语;

分页显示,每页显示15个词语,每组页码有20个,1-20/20-40~~~

PHP+JQuery+Ajax实现分页方法详解

首先是在PHP文件中的分页Pager的相关代码

public function searchWordsByInitial()
    //从AJAX发出的URL中获得参数:用户点击的字母和点击的页码
    $initial = htmlentities($_POST['initial'], ENT_QUOTES,"UTF-8");
    $page = htmlentities($_POST['page'], ENT_QUOTES,"UTF-8");
    $words = $this->_createWordObj();
    $i=0;//用于显示序号从1开始
    $perPageNum=12;//每一页显示的条数为12条
    $currentPageFirst=($page-1)*$perPageNum+1;
    $currentPageLast=$page*$perPageNum;
    //获取总记录数
    $sumNum=0;
    foreach ( $words[$initial] as $key=> $word ){
      $sumNum++;
    }
    //获取总页数
    $pageNums=0;
    if( $sumNum ){
      if( $sumNum < $perPageNum ){ $pageNums = 1; }        //如果总数据量小于$PageSize,那么只有一页
      if( $sumNum%$perPageNum ){                 //取总数据量除以每页数的余数
        $pageNums = (int)($sumNum/$perPageNum) + 1;      //如果有余数,则页数等于总数据量除以每页数的结果取整再加一
      }else{
        $pageNums = $sumNum/$perPageNum;           //如果没有余数,则页数等于总数据量除以每页数的结果
      }
    }
    else{
      $pageNums = 0;
    }
  //Pager显示
    echo $this->init_searchWordsByInitial_Pager($sumNum,$pageNums,$page);
    $tab_str.="<table ……………………这里是页面的具体内容………………"
    return $tab_str;
}
public function init_searchWordsByInitial_Pager($sumNum,$pageNums,$page)
{
     //根据用户点击的页码,获得当前页码组的首页码,如用户点击的38,那么这一组是21-40,首页码是21
     $current_first_page=floor(($page-1)/20)*20+1;
     $tab_str="<div id='searchWordsByInitial_Pager' class='pagination pagination-centered'><ul>";
     for($k=0;$k<=19;$k++)
     {
       $j=$k+$current_first_page;
       $tab_str.="<button class='not_more_btn'>".$j."</button>";
     }
     $tab_str.="</ul>  一共<span id='sumNums'>".$sumNum."</span>个词语,<span id='pageNums'>".$pageNums."</span>页</div>";
     return $tab_str;
}

init.js   相关的JQuery代码,响应用户的动作

//初始化分页 Pager
var pageNums;//总页数
var sumNums;//总记录数
function init_searchWordsByInitial_Pager(){
   pageNums=$("#pageNums").html();//JS从页面HTML获取
   sumNums=$("#sumNums").html();
   if(pageNums==1)//如果只有一页,则隐藏Pager
   {
    $("#searchWordsByInitial_Pager").html("</br>");
   }
   //让页码的默认值为1,默认显示的是第一页;
   if(page_initial==undefined){ page_initial=1;}
   //当页面过多时,我们一组只显示20个页码,后面缀一个NEXT按钮,点击后可以显示后面20个页码;同样,LAST按钮可以显示前面20个按钮
   $("#searchWordsByInitial_Pager ul button:eq(19)").after("<button id='more_forward' class='more'>Next</button>");
   $("#searchWordsByInitial_Pager ul button:eq(0)").before("<button id='more_backword' class='more'>Last</button>");
   //如果最后一组少于21页,那么就隐藏最后一个页码后面的,包括NEXT按钮【pageNums<21】
   //如果用户点击的page是最后20个page,那么也要隐藏最后一个页码后面的,包括NEXT按钮【offset<20】
   //(由于点击page会触发本初始化函数/其实可以将初始化函数的调用仅仅绑定到单击字母事件即可,不必跟Ajax动作绑在一起)
   var offset;
   offset=(Math.ceil(pageNums/20)*20)-parseInt(page_initial);
   if(pageNums<21||offset<20)
   {
    $("#searchWordsByInitial_Pager ul button").slice((pageNums%20)+1).hide();
   }
   //如果正好是20页,根据上一段代码,offset=19<20,会把整个Pager隐藏;需要再把它显示出来
   if(search_pageNums==20)
   {
      $("#searchWords_Pager ul button.not_more_btn").show();
   }
   //如果当前组的第一个page是1,那么隐藏LAST按钮;否则显示LAST按钮,允许用户点击翻到上一组
   if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(0).html()==1)
   {
      $("#searchWordsByInitial_Pager ul button:eq(0)").hide();
   }
   else
   {
      $("#searchWordsByInitial_Pager ul button:eq(0)").show();
   }
  }
  //单击NEXT按钮
  $("#more_forward").live("click",function(event){
    //只要有往后翻页,就会有 Last 按钮
    $("#searchWordsByInitial_Pager ul button:eq(0)").show();
    //让每一个page都自加20,如1-20变为21-40
    for(i=0;i<20;i++){
     $("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html(parseInt($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html())+20);
     //隐藏最后一个页码后面的按钮
     if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html()==pageNums)
     {
       $("#searchWordsByInitial_Pager ul button").slice(i+2).hide();
     }
    }
    })
  //单击LAST按钮
  $("#more_backword").live("click",function(event){
    //首先要让20个按钮都显示出来
    $("#searchWordsByInitial_Pager ul button").show();
    for(i=0;i<20;i++){
     $("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html(parseInt($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html())-20);
    }
    //判断是否要隐藏Last按钮
    if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(0).html()==1)
    {
      $("#searchWordsByInitial_Pager ul button:eq(0)").hide();
    }
    else
    {
      $("#searchWordsByInitial_Pager ul button:eq(0)").show();
    }
    })
   //获取用户点击的字母
   $(".initial-button-list button").live("click", function(event){
   //清除所有字母A-Z按钮的active class,并且设置点击的字母按钮为 active;这里不要使用 .attr 和 .removeAttr;
   $(".initial-button-list button").removeClass("active");
   $(this).addClass("active");
   //获取当前点击的字母和页码
   initial_value = $(this).html();
   page_initial=1;
   //将要传送的参数拼串 &action=list_by_initial&initial=O&page_initial=3
   btnData = "&action=list_by_initial"+ "&initial="+initial_value+"&page="+page_initial;
   $.ajax({
    type: "POST",
    url: processFile,
    data: btnData,
    success: function(data) {
     $("#word_table_by_initials").show();
     $("#word_table_by_initials").html("");
     $("#word_table_by_initials").html(data);
     init_searchWordsByInitial_Pager();
    },
    error: function(msg)
    {
      alert(msg);
    }
   });
 });
 //获取用户点击的页码(除去点击 more 按钮)
 $("#searchWordsByInitial_Pager button.not_more_btn").live("click", function(event){
   //清除所有页码的active class,并且设置点击的页码为 active;这里不要使用 .attr 和 .removeAttr;
   $("#searchWordsByInitial_Pager button").removeClass("active");
   $(this).addClass("active");
   //获取当前点击的页码
   page_initial=$(this).html();
   //将要传送的参数拼串 &action=list_by_initial&initial=O&page_initial=3
   btnData = "&action=list_by_initial"+ "&initial="+initial_value+"&page="+page_initial;
   $.ajax({
    type: "POST",
    url: processFile,
    data: btnData,
    success: function(data) {
     $("#word_list_by_initials").hide();
     $("#word_table_by_initials").html("");
     $("#word_table_by_initials").html(data);
     init_searchWordsByInitial_Pager();
    },
    error: function(msg)
    {
      alert(msg);
    }
   });
 });
});

一些注意事项:

1 $("div button.not_more_bt")中,前两个选择器之间是有空格 的,后两个没有;因为最后一个是 类选择器,要直接跟在button后面

2 .html() .val() .text()  的区别

3 :eq(index),:lt(index);gt(index) 中的 index 是从0开始,而且不能为变量,必须为 数字

如果需要让用到动态的 index,可以用

.eq(i)

4 var a=20;
var b=10;
var c;
c=a+b;

结果不是 30!是2020!

正确的写法是 c=parseInt(a)+_parseInt(b);

减法没事,但是最好也要转化一下

PHP 的 函数是 intval();

5 写代码之前,一定要规划好最优的方案,否则重头来就更费事了

6 JS代码和HTML加载的逻辑顺序

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
将PHP作为Shell脚本语言使用
Oct 09 PHP
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
php获取网页请求状态程序示例
Jun 17 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
php文件下载处理方法分析
Apr 22 PHP
PHP文件操作方法汇总
Jul 01 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
Apr 14 PHP
Laravel实现表单提交
May 07 PHP
PHP分享图片的生成方法
Apr 25 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 PHP
微信自定义菜单的创建/查询/取消php示例代码
Aug 05 #PHP
Thinkphp微信公众号支付接口
Aug 04 #PHP
浅析Laravel5中队列的配置及使用
Aug 04 #PHP
PHP中如何判断exec函数执行成功?
Aug 04 #PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 #PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 #PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 #PHP
You might like
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
PHP函数超时处理方法
2016/02/14 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
javascript实现前端成语点击验证优化
2020/06/24 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
python3排序的实例方法
2020/10/20 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
会计专业应届生求职信
2013/11/24 职场文书
五年级学生评语
2014/04/22 职场文书
初中同学会活动方案
2014/08/22 职场文书
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python