jquery ajax php+mysql 无刷新分页 详细实例

  最近在接触jquery和ajax,当前项目也会用到分页,为了用户体验更好一些,就准备用无刷新分页,这个demo很适合新手学习查看,写的比较清晰,话不多说,直接上代码吧。

  首先是html页面,index.html,代码如下:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>php+mysql+ajax+jquery分页</title>
 6 
 7 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
 8 <script type="text/javascript" src="ajaxPager.js"></script>
 9 <style>
10     #main{
11         width:980px;
12         margin:0px auto;
13     }
14     ul
15     {
16         list-style:none;
17         margin:0px;
18     }
19     #list li{
20         width:220px;
21         height:280px;
22         float:left;
23         margin-left:10px;
24     }
25     .pager .cur {
26         border-top-color: rgb(255, 255, 255);
27         border: 1px solid #fff;
28         background: 0;
29         font-weight: bold;
30         color: #000;
31     }
32     .pager a, .pager span {
33         margin-top: 5px;
34     }
35     .pager a, .pager span {
36         background: none repeat scroll 0 0 #fff;
37         border: 1px solid #e7ecf0;
38         color: #0000cd;
39         float: left;
40         height: 22px;
41         line-height: 22px;
42         margin-right: 5px;
43         overflow: hidden;
44         text-align: center;
45         text-decoration: none;
46         width: auto;
47         padding: 0 8px;
48     }
49     .pager span {
50         background: none repeat scroll 0 0 #fff;
51         border: 1px solid #e7ecf0;
52         color: #0000cd;
53         float: left;
54         height: 22px;
55         line-height: 22px;
56         margin-right: 5px;
57         overflow: hidden;
58         text-align: center;
59         text-decoration: none;
60         width: auto;
61         padding: 0 8px;
62     }
63     .pager {
64         border-top: 0;
65         padding: 12px 0 30px 15px;
66         float: left;
67     }
68     .clearfix {
69         display: block;
70     }
71     .pager {
72         float: left;
73         font-family: Arial;
74         font-size: 13px;
75     }
76     .clearfix {
77     zoom: 1;
78     }
79 </style>
80 
81 
82 </head>
83 
84 <body>
85 
86 
87     <div id="main">
88         <div id="pagecount" class="pager clearfix"></div><div id="loading"></div>
89         <br />
90         <br />
91         <br />
92         <br />
93         <div id="list">
94             <ul></ul>
95         </div>
96     </div>
97 </body>
98 </html>

 

  样式我随便写的,毕竟我样式写的很差,大家可以自己换样式的。

  然后就是js代码了,ajaxPager.js,代码如下:

  

  1 var curPage = 1; //当前页码
  2 var total,pageSize,totalPage;
  3 //获取数据
  4 function getData(page){ 
  5     $.ajax({
  6         type: 'POST',
  7         url: 'pages.php',
  8         data: {'pageNum':page-1},
  9         dataType:'json',
 10         beforeSend:function(){
 11             $("#loading").html("<img id='loadin'g src='loading.gif'>");
 12         },
 13         success:function(json){
 14             $("#loading").html("");
 15             $("#list ul").empty();
 16             total = json.total; //总记录数
 17             pageSize = json.pageSize; //每页显示条数
 18             curPage = page; //当前页
 19             totalPage = json.totalPage; //总页数
 20             var li = "";
 21             var list = json.list;
 22             $.each(list,function(index,array){ //遍历json数据列
 23                 li += "<li><a href='#'><img src='"+array['pic']+"'></a><p>"+array['title'].substring(0,10)+"</p></li>";
 24             });
 25             $("#list ul").append(li);
 26         },
 27         complete:function(){ //生成分页条
 28             getPageBar();
 29         },
 30         error:function(){
 31             alert("数据加载失败");
 32         }
 33     });
 34 }
 35 
 36 //获取分页条
 37 function getPageBar(){
 38     //页码大于最大页数
 39     if(curPage>totalPage) curPage=totalPage;
 40     //页码小于1
 41     if(curPage<1) curPage=1;
 42     pageStr = "<span class=''>共"+total+"条"+curPage+"/"+totalPage+"</span>";
 43     
 44     //如果是第一页
 45     if(totalPage<=4)
 46     {
 47         if(curPage==1){
 48             pageStr += "<span class='cur'>1</span>";
 49             for(var i=2;i<=totalPage;i++)
 50             {
 51                 pageStr += "<a href='javascript:void(0)' rel='"+i+"'>"+i+"</a>";
 52             }
 53         }else{
 54             pageStr += "<a href='javascript:void(0)' rel='1'><<</a><a href='javascript:void(0)' rel='"+(curPage-1)+"'><</a>";
 55             for(var i=1;i<=totalPage;i++)
 56             {
 57                 if(i==curPage)
 58                 {
 59                     pageStr += "<span class='cur'>"+i+"</span>"
 60                 }
 61                 else
 62                 {
 63                     pageStr += "<a href='javascript:void(0)' rel='"+i+"'>"+i+"</a>";
 64                 }
 65             }
 66             
 67         }
 68     }
 69     else//当页数大于5的时候就要这样显示1 2 3 4 ...
 70     {
 71         if(curPage<=3){
 72             if(curPage==1)
 73             {
 74                 pageStr += "<span class='cur'>1</span>";
 75             }
 76             else
 77             {
 78                 pageStr += "<a href='javascript:void(0)' rel='1'><<</a><a href='javascript:void(0)' rel='"+(curPage-1)+"'><</a>";
 79                 pageStr += "<span class='cur'><a href='javascript:void(0)' rel='1'>1</a></span>";
 80             }
 81             for(var i=2;i<=4;i++)
 82             {
 83                 if(i==curPage)
 84                 {
 85                     pageStr += "<span class='cur'>"+i+"</span>"
 86                 }
 87                 else
 88                 {
 89                     pageStr += "<a href='javascript:void(0)' rel='"+i+"'>"+i+"</a>";
 90                 }
 91             }
 92             pageStr += "<span class='cur'>...</span>";
 93         }else{
 94             pageStr += "<a href='javascript:void(0)' rel='1'><<</a><a href='javascript:void(0)' rel='"+(curPage-1)+"'><</a>";
 95             pageStr += "<span class='cur'>...</span>";
 96             if(curPage>totalPage-2)
 97             {
 98                 for(var i=totalPage-2;i<=totalPage;i++)
 99                 {
100                     if(i==curPage)
101                     {
102                         pageStr += "<span class='cur'>"+i+"</span>"
103                     }
104                     else
105                     {
106                         pageStr += "<a href='javascript:void(0)' rel='"+i+"'>"+i+"</a>";
107                     }
108                 }
109             }
110             else
111             {
112                 pageStr += "<a href='javascript:void(0)' rel='"+(curPage-1)+"'>"+(curPage-1)+"</a>";
113                 pageStr += "<span class='cur'>"+curPage+"</span>";
114                 pageStr += "<a href='javascript:void(0)' rel='"+(parseInt(curPage)+1)+"'>"+(parseInt(curPage)+1)+"</a>";
115                 pageStr += "<span class='cur'>...</span>";
116             }
117         }
118     }
119     //如果是最后页
120     if(curPage>=totalPage){
121         //pageStr += "<span>></span>   <span>>></span>";
122     }else{
123         pageStr += "<a href='javascript:void(0)' rel='"+(parseInt(curPage)+1)+"'>></a><a href='javascript:void(0)' rel='"+totalPage+"'>>></a>";
124     }
125         
126     $("#pagecount").html(pageStr);
127 }
128 
129 $(function(){
130     getData(1);
131     $("#pagecount  a").live('click',function(){
132         var rel = $(this).attr("rel");
133         if(rel){
134             getData(rel);
135         }
136     });
137 });

 

  因为项目的需要,我这个页面页数显示只能显示几页,比如就这样 <<   <  ... 5 6 7 ... >  >>,要改显示的,就在ajaxPager.js里面改。

  $.ajax({ 中url: 'pages.php',处理就在pages.php中处理。那么就来看看pages.php中的代码:

  

 1 <?php
 2 include_once('connect.php');
 3 
 4 $page = intval($_POST['pageNum']);
 5 
 6 $result = mysql_query("select id from food");
 7 $total = mysql_num_rows($result);//总记录数
 8 
 9 $pageSize = 8; //每页显示数
10 $totalPage = ceil($total/$pageSize); //总页数
11 
12 $startPage = $page*$pageSize;
13 $arr['total'] = $total;
14 $arr['pageSize'] = $pageSize;
15 $arr['totalPage'] = $totalPage;
16 $query = mysql_query("select id,title,pic from food order by id asc limit $startPage,$pageSize");
17 while($row=mysql_fetch_array($query)){
18      $arr['list'][] = array(
19          'id' => $row['id'],
20         'title' => $row['title'],
21         'pic' => $row['pic'],
22      );
23 }
24 //print_r($arr);
25 echo json_encode($arr);
26 ?>

 

  上面当然还有数据库连接了啦,这个应该很简单吧,还是贴出来connect.php:

  

 1 <?php
 2 include_once('connect.php');
 3 
 4 $page = intval($_POST['pageNum']);
 5 
 6 $result = mysql_query("select id from food");
 7 $total = mysql_num_rows($result);//总记录数
 8 
 9 $pageSize = 8; //每页显示数
10 $totalPage = ceil($total/$pageSize); //总页数
11 
12 $startPage = $page*$pageSize;
13 $arr['total'] = $total;
14 $arr['pageSize'] = $pageSize;
15 $arr['totalPage'] = $totalPage;
16 $query = mysql_query("select id,title,pic from food order by id asc limit $startPage,$pageSize");
17 while($row=mysql_fetch_array($query)){
18      $arr['list'][] = array(
19          'id' => $row['id'],
20         'title' => $row['title'],
21         'pic' => $row['pic'],
22      );
23 }
24 //print_r($arr);
25 echo json_encode($arr);
26 ?>

 

  然后就完成了,具体思路很清晰,点击页数的时候jquery获取rel中的页面值,传进去数据库获取相应数据展现在页面上。

  然后还有数据库吧,我的表示这样的:

1 CREATE TABLE IF NOT EXISTS `food` (
2   `id` int(11) NOT NULL AUTO_INCREMENT,
3   `title` varchar(100) NOT NULL,
4   `pic` varchar(255) NOT NULL,
5   PRIMARY KEY (`id`)
6 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=31 ;

 我这边有一个demo,然后大家可以下载看看。多多指教。

http://pan.baidu.com/share/link?shareid=1518322039&uk=67299903

posted @ 2013-08-05 21:13  雷杰  阅读(2719)  评论(0编辑  收藏  举报