分页技术原理与实现(三)——无刷新的Ajax分页技术

紧接着上篇—分页技术原理与实现(二)——Java+Oracle实现,本篇继续分析分页技术。上篇讲的是分页技术的代码实现,这篇继续分析一下分页技术的效果控制。

  上篇已经用代码简单的实现了一个分页。但是我们都看到,代码中每次通过servlet请求取得结果集后,都会转向到一个jsp页面显示结果,这样每次查询页面都会刷新一下,比如查询出现结果集后要查看第三页,页面就会刷新一下。这样页面给人的效果感觉就会有点不舒服,所以我们希望能够在通过条件查询结果集后无论访问哪一页,页面都不会刷新,而只是结果集变化。要解决这个,我想大家很容易就会想到Ajax了。

  是啊,这就要请Ajax出山了。当通过查询条件查询到结果集后,以后每次访问任何一页都通过Ajax来访问,使用异步Ajax与Servlet进行交互,将结果查询出来返回给Ajax,这样页面内容因为Ajax返回结果而改变,而页面却不会刷新,这就实现了无刷新的分页技术。

  下面我们来看一个简单的无刷新分页实现,代码如下:

 

 

[xhtml]  view plain copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  
  3.     <head>  
  4.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5.         <link rel="stylesheet" href="../lib/jquery_pagination/pagination.css" mce_href="lib/jquery_pagination/pagination.css" />  
  6.         <mce:script type="text/javascript" src="../lib/jquery/jquery.min.js" mce_src="lib/jquery/jquery.min.js"></mce:script>  
  7.         <mce:script type="text/javascript"  
  8.             src="../lib/jquery_pagination/jquery.pagination.js"></mce:script>  
  9.         <mce:script type="text/javascript"><!--  
  10.     /**  
  11.      * Callback function that displays the content.  
  12.      *  
  13.      * Gets called every time the user clicks on a pagination link.  
  14.      *  
  15.      * @param {int}page_index New Page index  
  16.      * @param {jQuery} jq the container with the pagination links as a jQuery object  
  17.      */  
  18.     function pageselectCallback(page_index, jq) {  
  19.         var new_content = $('#hiddenresult div.result:eq(' + page_index + ')')  
  20.                 .clone();  
  21.         $('#Searchresult').empty().append(new_content);  
  22.         return false;  
  23.     }  
  24.   
  25.     function initPagination() {  
  26.         var num_entries = $('#hiddenresult div.result').length;  
  27.         // Create pagination element  
  28.         $("#Pagination").pagination(num_entries, {  
  29.             num_edge_entries : 2,  
  30.             num_display_entries : 8,  
  31.             callback : pageselectCallback,  
  32.             items_per_page : 1  
  33.         });  
  34.     }  
  35.   
  36.     // When the HTML has loaded, call initPagination to paginate the elements          
  37.     $(document).ready(function() {  
  38.         initPagination();  
  39.     });  
  40. // --></mce:script>  
  41.         <mce:style type="text/css"><!--  
  42. * {  
  43.     padding: 0;  
  44.     margin: 0;  
  45. }  
  46.   
  47. body {  
  48.     background-color: #fff;  
  49.     margin: 20px;  
  50.     padding: 0;  
  51.     height: 100%;  
  52.     font-family: Arial, Helvetica, sans-serif;  
  53. }  
  54.   
  55. #Searchresult {  
  56.     margin-top: 15px;  
  57.     margin-bottom: 15px;  
  58.     border: solid 1px #eef;  
  59.     padding: 5px;  
  60.     background: #eef;  
  61.     width: 40%;  
  62. }  
  63.   
  64. #Searchresult p {  
  65.     margin-bottom: 1.4em;  
  66. }  
  67. --></mce:style><style type="text/css" mce_bogus="1">* {  
  68.     padding: 0;  
  69.     margin: 0;  
  70. }  
  71.   
  72. body {  
  73.     background-color: #fff;  
  74.     margin: 20px;  
  75.     padding: 0;  
  76.     height: 100%;  
  77.     font-family: Arial, Helvetica, sans-serif;  
  78. }  
  79.   
  80. #Searchresult {  
  81.     margin-top: 15px;  
  82.     margin-bottom: 15px;  
  83.     border: solid 1px #eef;  
  84.     padding: 5px;  
  85.     background: #eef;  
  86.     width: 40%;  
  87. }  
  88.   
  89. #Searchresult p {  
  90.     margin-bottom: 1.4em;  
  91. }</style>  
  92.         <title>Pagination</title>  
  93.     </head>  
  94.     <body>  
  95.         <h4>  
  96.             jQuery Pagination Plugin Demo  
  97.         </h4>  
  98.   
  99.         <div id="Pagination" class="pagination">  
  100.         </div>  
  101.         <br style="clear: both;" mce_style="clear: both;" />  
  102.         <div id="Searchresult">  
  103.             This content will be replaced when pagination inits.  
  104.         </div>  
  105.   
  106.         <div id="hiddenresult" style="display: none;" mce_style="display: none;">  
  107.             <div class="result">  
  108.                 <p>  
  109.                     Globally maximize granular "outside the box" thinking vis-a-vis  
  110.                     quality niches. Proactively formulate 24/7 results whereas 2.0  
  111.                     catalysts for change. Professionally implement 24/365 niches rather  
  112.                     than client-focused users.  
  113.                 </p>  
  114.                 <p>  
  115.                     Competently engineer high-payoff "outside the box" thinking through  
  116.                     cross functional benefits. Proactively transition intermandated  
  117.                     processes through open-source niches. Progressively engage  
  118.                     maintainable innovation and extensible interfaces.  
  119.                 </p>  
  120.             </div>  
  121.             <div class="result">  
  122.                 <p>  
  123.                     Credibly fabricate e-business models for end-to-end niches.  
  124.                     Compellingly disseminate integrated e-markets without ubiquitous  
  125.                     services. Credibly create equity invested channels with  
  126.                     multidisciplinary human capital.  
  127.                 </p>  
  128.                 <p>  
  129.                     Interactively integrate competitive users rather than fully tested  
  130.                     infomediaries. Seamlessly initiate premium functionalities rather  
  131.                     than impactful architectures. Rapidiously leverage existing  
  132.                     resource-leveling processes via user-centric portals.  
  133.                 </p>  
  134.             </div>  
  135.             <div class="result">  
  136.                 <p>  
  137.                     Monotonectally initiate unique e-services vis-a-vis client-centric  
  138.                     deliverables. Quickly impact parallel opportunities with B2B  
  139.                     bandwidth. Synergistically streamline client-focused  
  140.                     infrastructures rather than B2C e-commerce.  
  141.                 </p>  
  142.                 <p>  
  143.                     Phosfluorescently fabricate 24/365 e-business through 24/365 total  
  144.                     linkage. Completely facilitate high-quality systems without  
  145.                     stand-alone strategic theme areas.  
  146.                 </p>  
  147.             </div>  
  148.         </div>  
  149.     </body>  
  150. </html>  

 

 

  这就是一个非常简单的无刷新分页实现,使用了JQuery+ jquery.pagination框架。现在随着框架的流行,尤其是Jquery的流行,使用框架来开发是非常有效的。上面代码原理在代码中已有注释,也可参考Jquery的官方网站:。

  现在就可以来开发我们的Ajax无刷新分页实现。基于上面的原理,在响应页码被按下的代码中pageselectCallback(),我们使用一个Ajax异步访问数据库,通过点击的页号将结果集取出后再用异步设置到页面,这样就可以完成了无刷新实现。

  页码被按下的响应函数pageselectCallback()修改如下:

  这样就可以用异步方式获取结果,用showResponse函数来处理结果了,showResponse函数如下:

 

 

[javascript]  view plain copy
  1. function showResponse(request){  
  2.         var content = request;  
  3.          var root = content.documentElement;  
  4.             var responseNodes = root.getElementsByTagName("root");  
  5.             var itemList = new Array();  
  6.             var pageList=new Array();  
  7.             alert(responseNodes.length);  
  8.             if (responseNodes.length > 0) {  
  9.               var responseNode = responseNodes[0];  
  10.               var itemNodes = responseNode.getElementsByTagName("data");  
  11.               for (var i=0; i<itemNodes.length; i++) {  
  12.                 var idNodes = itemNodes[i].getElementsByTagName("id");  
  13.                 var nameNodes = itemNodes[i].getElementsByTagName("name");  
  14.                 var sexNodes=itemNodes[i].getElementsByTagName("sex");  
  15.                 var ageNodes=itemNodes[i].getElementsByTagName("age");  
  16.                 if (idNodes.length > 0 && nameNodes.length > 0&&sexNodes.length > 0&& ageNodes.length > 0) {  
  17.                   var id=idNodes[0].firstChild.nodeValue;  
  18.                   var name = nameNodes[0].firstChild.nodeValue;  
  19.                   var sex = sexNodes[0].firstChild.nodeValue;  
  20.                   var age=ageNodes[0].firstChild.nodeValue;  
  21.                   itemList.push(new Array(id,name, sex,age));  
  22.                 }  
  23.               }  
  24.                 
  25.               var pageNodes = responseNode.getElementsByTagName("pagination");  
  26.               if (pageNodes.length>0) {  
  27.                 var totalNodes = pageNodes[0].getElementsByTagName("total");  
  28.                 var startNodes = pageNodes[0].getElementsByTagName("start");  
  29.                 var endNodes=pageNodes[0].getElementsByTagName("end");  
  30.                 var currentNodes=pageNodes[0].getElementsByTagName("pageno");  
  31.                 if (totalNodes.length > 0 && startNodes.length > 0&&endNodes.length > 0) {  
  32.                   var total=totalNodes[0].firstChild.nodeValue;  
  33.                   var start = startNodes[0].firstChild.nodeValue;  
  34.                   var end = endNodes[0].firstChild.nodeValue;  
  35.                   var current=currentNodes[0].firstChild.nodeValue;  
  36.                   pageList.push(new Array(total,start,end,current));  
  37.                 }  
  38.               }  
  39.             }  
  40.         showTable(itemList,pageList);  
  41.     }  

 

 

  如上代码就是用来处理通过Ajax异步请求Servlet后返回的XML格式的结果,其中Servlet代码在上篇中。其中itemList、pageList分别是解析返回后生成的用户List和分页导航,这样用户就可以以自己的展现方式展现数据了。

[xhtml]  view plain copy
  1. function pageselectCallback(page_index, jq){  
  2.        var pars="pageNo="+(page_index+1);  
  3.         $.ajax({  
  4.            type: "POST",  
  5.            url: " UserBasicSearchServlet",  
  6.            cache: false,  
  7.            data: pars,  
  8.            success: showResponse  
  9.         });  
  10.        return false;  
  11. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值