欢迎来到福编程网,本站提供各种互联网专业知识!

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

发布时间:2016-08-06 作者:php攻城师 来源:转载
这篇文章主要介绍了PHP+JQuery+Ajax实现分页的方法,结合实例形式详细分析了php数据查询、分页设置及ajax交互的相关技巧,并总结了分页的相关注意事项,需要的朋友可以参考下

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

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

最终的效果如图:

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

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

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

  1. public function searchWordsByInitial()
  2. //从AJAX发出的URL中获得参数:用户点击的字母和点击的页码
  3. $initial = htmlentities($_POST['initial'], ENT_QUOTES,"UTF-8");
  4. $page = htmlentities($_POST['page'], ENT_QUOTES,"UTF-8");
  5. $words = $this->_createWordObj();
  6. $i=0;//用于显示序号从1开始
  7. $perPageNum=12;//每一页显示的条数为12条
  8. $currentPageFirst=($page-1)*$perPageNum+1;
  9. $currentPageLast=$page*$perPageNum;
  10. //获取总记录数
  11. $sumNum=0;
  12. foreach ( $words[$initial] as $key=> $word ){
  13. $sumNum++;
  14. }
  15. //获取总页数
  16. $pageNums=0;
  17. if( $sumNum ){
  18. if( $sumNum < $perPageNum ){ $pageNums = 1; } //如果总数据量小于$PageSize,那么只有一页
  19. if( $sumNum%$perPageNum ){ //取总数据量除以每页数的余数
  20. $pageNums = (int)($sumNum/$perPageNum) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一
  21. }else{
  22. $pageNums = $sumNum/$perPageNum; //如果没有余数,则页数等于总数据量除以每页数的结果
  23. }
  24. }
  25. else{
  26. $pageNums = 0;
  27. }
  28. //Pager显示
  29. echo $this->init_searchWordsByInitial_Pager($sumNum,$pageNums,$page);
  30. $tab_str.="
    代码
    1. public function init_searchWordsByInitial_Pager($sumNum,$pageNums,$page)
    2. {
    3. //根据用户点击的页码,获得当前页码组的首页码,如用户点击的38,那么这一组是21-40,首页码是21
    4. $current_first_page=floor(($page-1)/20)*20+1;
    5. $tab_str="";
    6. return $tab_str;
    7. }

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

    代码
    1. //初始化分页 Pager
    2. var pageNums;//总页数
    3. var sumNums;//总记录数
    4. function init_searchWordsByInitial_Pager(){
    5. pageNums=$("#pageNums").html();//JS从页面HTML获取
    6. sumNums=$("#sumNums").html();
    7. if(pageNums==1)//如果只有一页,则隐藏Pager
    8. {
    9. $("#searchWordsByInitial_Pager").html("
      ");
    10. }
    11. //让页码的默认值为1,默认显示的是第一页;
    12. if(page_initial==undefined){ page_initial=1;}
    13. //当页面过多时,我们一组只显示20个页码,后面缀一个NEXT按钮,点击后可以显示后面20个页码;同样,LAST按钮可以显示前面20个按钮
    14. $("#searchWordsByInitial_Pager ul button:eq(19)").after("");
    15. $("#searchWordsByInitial_Pager ul button:eq(0)").before("");
    16. //如果最后一组少于21页,那么就隐藏最后一个页码后面的,包括NEXT按钮【pageNums<21】
    17. //如果用户点击的page是最后20个page,那么也要隐藏最后一个页码后面的,包括NEXT按钮【offset<20】
    18. //(由于点击page会触发本初始化函数/其实可以将初始化函数的调用仅仅绑定到单击字母事件即可,不必跟Ajax动作绑在一起)
    19. var offset;
    20. offset=(Math.ceil(pageNums/20)*20)-parseInt(page_initial);
    21. if(pageNums<21||offset<20)
    22. {
    23. $("#searchWordsByInitial_Pager ul button").slice((pageNums%20)+1).hide();
    24. }
    25. //如果正好是20页,根据上一段代码,offset=19<20,会把整个Pager隐藏;需要再把它显示出来
    26. if(search_pageNums==20)
    27. {
    28. $("#searchWords_Pager ul button.not_more_btn").show();
    29. }
    30. //如果当前组的第一个page是1,那么隐藏LAST按钮;否则显示LAST按钮,允许用户点击翻到上一组
    31. if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(0).html()==1)
    32. {
    33. $("#searchWordsByInitial_Pager ul button:eq(0)").hide();
    34. }
    35. else
    36. {
    37. $("#searchWordsByInitial_Pager ul button:eq(0)").show();
    38. }
    39. }
    40. //单击NEXT按钮
    41. $("#more_forward").live("click",function(event){
    42. //只要有往后翻页,就会有 Last 按钮
    43. $("#searchWordsByInitial_Pager ul button:eq(0)").show();
    44. //让每一个page都自加20,如1-20变为21-40
    45. for(i=0;i<20;i++){
    46. $("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html(parseInt($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html())+20);
    47. //隐藏最后一个页码后面的按钮
    48. if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html()==pageNums)
    49. {
    50. $("#searchWordsByInitial_Pager ul button").slice(i+2).hide();
    51. }
    52. }
    53. })
    54. //单击LAST按钮
    55. $("#more_backword").live("click",function(event){
    56. //首先要让20个按钮都显示出来
    57. $("#searchWordsByInitial_Pager ul button").show();
    58. for(i=0;i<20;i++){
    59. $("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html(parseInt($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html())-20);
    60. }
    61. //判断是否要隐藏Last按钮
    62. if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(0).html()==1)
    63. {
    64. $("#searchWordsByInitial_Pager ul button:eq(0)").hide();
    65. }
    66. else
    67. {
    68. $("#searchWordsByInitial_Pager ul button:eq(0)").show();
    69. }
    70. })
    71. //获取用户点击的字母
    72. $(".initial-button-list button").live("click", function(event){
    73. //清除所有字母A-Z按钮的active class,并且设置点击的字母按钮为 active;这里不要使用 .attr 和 .removeAttr;
    74. $(".initial-button-list button").removeClass("active");
    75. $(this).addClass("active");
    76. //获取当前点击的字母和页码
    77. initial_value = $(this).html();
    78. page_initial=1;
    79. //将要传送的参数拼串 &action=list_by_initial&initial=O&page_initial=3
    80. btnData = "&action=list_by_initial"+ "&initial="+initial_value+"&page="+page_initial;
    81. $.ajax({
    82. type: "POST",
    83. url: processFile,
    84. data: btnData,
    85. success: function(data) {
    86. $("#word_table_by_initials").show();
    87. $("#word_table_by_initials").html("");
    88. $("#word_table_by_initials").html(data);
    89. init_searchWordsByInitial_Pager();
    90. },
    91. error: function(msg)
    92. {
    93. alert(msg);
    94. }
    95. });
    96. });
    97. //获取用户点击的页码(除去点击 more 按钮)
    98. $("#searchWordsByInitial_Pager button.not_more_btn").live("click", function(event){
    99. //清除所有页码的active class,并且设置点击的页码为 active;这里不要使用 .attr 和 .removeAttr;
    100. $("#searchWordsByInitial_Pager button").removeClass("active");
    101. $(this).addClass("active");
    102. //获取当前点击的页码
    103. page_initial=$(this).html();
    104. //将要传送的参数拼串 &action=list_by_initial&initial=O&page_initial=3
    105. btnData = "&action=list_by_initial"+ "&initial="+initial_value+"&page="+page_initial;
    106. $.ajax({
    107. type: "POST",
    108. url: processFile,
    109. data: btnData,
    110. success: function(data) {
    111. $("#word_list_by_initials").hide();
    112. $("#word_table_by_initials").html("");
    113. $("#word_table_by_initials").html(data);
    114. init_searchWordsByInitial_Pager();
    115. },
    116. error: function(msg)
    117. {
    118. alert(msg);
    119. }
    120. });
    121. });
    122. });

    一些注意事项:

    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;

  31. var b=10;

  32. var c;

  33. c=a+b;

    结果不是 30!是2020!

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

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

    PHP 的 函数是 intval();

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

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

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP+ajax技巧与应用小结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

  34. 相关推荐

  35. 文章分类

  36. php基础
  37. php技巧
  38. php实例
  39. php文摘
  40. php模板
  41. 热门关键词

  42. 雪佛兰
  43. 通用
  44. 奢华
  45. 劳斯莱斯
  46. 旗舰版
  47. 64位
  48. 收藏夹
  49. 解调器
  50. 网卡
  51. 网线
  52. 分辨率
  53. 家电
  54. 4k
  55. 显示器
  56. header
  57. USER_AGENT
  58. 色彩
  59. 图形
  60. 商业
  61. 生成
  62. 热门文章

  63. 最新更新

  64. 网站首页
  65.  | 关于我们
  66.  | 免责声明
  67.  | 广告合作
  68.  | 联系我们
  69. Copyright @ 2015-2025 福编程 fuphp All Rights Reserved.
  70. 豫ICP备15036959号-4