分页技术原理与实现之无刷新的Ajax分页技术(三)
紧接着上篇—分页技术原理与实现之Java+Oracle代码实现分页(二),本篇继续分析分页技术。上篇讲的是分页技术的代码实现,这篇继续分析一下分页技术的效果控制。
上篇已经用代码简单的实现了一个分页。但是我们都看到,代码中每次通过servlet请求取得结果集后,都会转向到一个jsp页面显示结果,这样每次查询页面都会刷新一下,比如查询出现结果集后要查看第三页,页面就会刷新一下。这样页面给人的效果感觉就会有点不舒服,所以我们希望能够在通过条件查询结果集后无论访问哪一页,页面都不会刷新,而只是结果集变化。要解决这个,我想大家很容易就会想到Ajax了。
是啊,这就要请Ajax出山了。当通过查询条件查询到结果集后,以后每次访问任何一页都通过Ajax来访问,使用异步Ajax与Servlet进行交互,将结果查询出来返回给Ajax,这样页面内容因为Ajax返回结果而改变,而页面却不会刷新,这就实现了无刷新的分页技术。
下面我们来看一个简单的无刷新分页实现,代码如下:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <linkrel="stylesheet"href="../lib/jquery_pagination/pagination.css"mce_href="lib/jquery_pagination/pagination.css"/> <mce:scripttype="text/<ahref="http://lib.csdn.net/base/javascript"class='replace_word'title="JavaScript知识库"target='_blank'style='color:#df3434;font-weight:bold;'>JavaScript</a>"src="../lib/<ahref="http://lib.csdn.net/base/jquery"class='replace_word'title="jQuery知识库"target='_blank'style='color:#df3434;font-weight:bold;'>jQuery</a>/jquery.min.js"mce_src="lib/jquery/jquery.min.js"></mce:script> <mce:scripttype="text/javascript" src="../lib/jquery_pagination/jquery.pagination.js"></mce:script> <mce:scripttype="text/javascript"><!-- /** *Callbackfunctionthatdisplaysthecontent. * *Getscalledeverytimetheuserclicksonapaginationlink. * *@param{int}page_indexNewPageindex *@param{jQuery}jqthe<ahref="http://lib.csdn.net/base/docker"class='replace_word'title="Docker知识库"target='_blank'style='color:#df3434;font-weight:bold;'>Container</a>withthepaginationlinksasajQueryobject */ functionpageselectCallback(page_index,jq){ varnew_content=$('#hiddenresultdiv.result:eq('+page_index+')') .clone(); $('#Searchresult').empty().append(new_content); returnfalse; } functioninitPagination(){ varnum_entries=$('#hiddenresultdiv.result').length; //Createpaginationelement $("#Pagination").pagination(num_entries,{ num_edge_entries:2, num_display_entries:8, callback:pageselectCallback, items_per_page:1 }); } //WhentheHTMLhasloaded,callinitPaginationtopaginatetheelements $(document).ready(function(){ initPagination(); }); //--></mce:script> <mce:styletype="text/css"><!-- *{ padding:0; margin:0; } body{ background-color:#fff; margin:20px; padding:0; height:100%; font-family:Arial,Helvetica,sans-serif; } #Searchresult{ margin-top:15px; margin-bottom:15px; border:solid1px#eef; padding:5px; background:#eef; width:40%; } #Searchresultp{ margin-bottom:1.4em; } --></mce:style><styletype="text/css"mce_bogus="1">*{ padding:0; margin:0; } body{ background-color:#fff; margin:20px; padding:0; height:100%; font-family:Arial,Helvetica,sans-serif; } #Searchresult{ margin-top:15px; margin-bottom:15px; border:solid1px#eef; padding:5px; background:#eef; width:40%; } #Searchresultp{ margin-bottom:1.4em; }</style> <title>Pagination</title> </head> <body> <h4> jQueryPaginationPluginDemo </h4> <divid="Pagination"class="pagination"> </div> <brstyle="clear:both;"mce_style="clear:both;"/> <divid="Searchresult"> Thiscontentwillbereplacedwhenpaginationinits. </div> <divid="hiddenresult"style="display:none;"mce_style="display:none;"> <divclass="result"> <p> Globallymaximizegranular"outsidethebox"thinkingvis-a-vis qualityniches.Proactivelyformulate24/7resultswhereas2.0 catalystsforchange.Professionallyimplement24/365nichesrather thanclient-focusedusers. </p> <p> Competentlyengineerhigh-payoff"outsidethebox"thinkingthrough crossfunctionalbenefits.Proactivelytransitionintermandated processesthroughopen-sourceniches.Progressivelyengage maintainableinnovationandextensibleinterfaces. </p> </div> <divclass="result"> <p> Crediblyfabricatee-businessmodelsforend-to-endniches. Compellinglydisseminateintegratede-marketswithoutubiquitous services.Crediblycreateequityinvestedchannelswith multidisciplinaryhumancapital. </p> <p> Interactivelyintegratecompetitiveusersratherthanfullytested infomediaries.Seamlesslyinitiatepremiumfunctionalitiesrather thanimpactfularchitectures.Rapidiouslyleverageexisting resource-levelingprocessesviauser-centricportals. </p> </div> <divclass="result"> <p> Monotonectallyinitiateuniquee-servicesvis-a-visclient-centric deliverables.QuicklyimpactparallelopportunitieswithB2B bandwidth.Synergisticallystreamlineclient-focused infrastructuresratherthanB2Ce-commerce. </p> <p> Phosfluorescentlyfabricate24/365e-businessthrough24/365total linkage.Completelyfacilitatehigh-qualitysystemswithout stand-alonestrategicthemeareas. </p> </div> </div> </body> </html>
这就是一个非常简单的无刷新分页实现,使用了JQuery+jquery.pagination框架。现在随着框架的流行,尤其是Jquery的流行,使用框架来开发是非常有效的。上面代码原理在代码中已有注释,也可参考Jquery的官方网站:。
现在就可以来开发我们的Ajax无刷新分页实现。基于上面的原理,在响应页码被按下的代码中pageselectCallback(),我们使用一个Ajax异步访问数据库,通过点击的页号将结果集取出后再用异步设置到页面,这样就可以完成了无刷新实现。
页码被按下的响应函数pageselectCallback()修改如下:
这样就可以用异步方式获取结果,用showResponse函数来处理结果了,showResponse函数如下:
functionshowResponse(request){ varcontent=request; varroot=content.documentElement; varresponseNodes=root.getElementsByTagName("root"); varitemList=newArray(); varpageList=newArray(); alert(responseNodes.length); if(responseNodes.length>0){ varresponseNode=responseNodes[0]; varitemNodes=responseNode.getElementsByTagName("data"); for(vari=0;i<itemNodes.length;i++){ varidNodes=itemNodes[i].getElementsByTagName("id"); varnameNodes=itemNodes[i].getElementsByTagName("name"); varsexNodes=itemNodes[i].getElementsByTagName("sex"); varageNodes=itemNodes[i].getElementsByTagName("age"); if(idNodes.length>0&&nameNodes.length>0&&sexNodes.length>0&&ageNodes.length>0){ varid=idNodes[0].firstChild.nodeValue; varname=nameNodes[0].firstChild.nodeValue; varsex=sexNodes[0].firstChild.nodeValue; varage=ageNodes[0].firstChild.nodeValue; itemList.push(newArray(id,name,sex,age)); } } varpageNodes=responseNode.getElementsByTagName("pagination"); if(pageNodes.length>0){ vartotalNodes=pageNodes[0].getElementsByTagName("total"); varstartNodes=pageNodes[0].getElementsByTagName("start"); varendNodes=pageNodes[0].getElementsByTagName("end"); varcurrentNodes=pageNodes[0].getElementsByTagName("pageno"); if(totalNodes.length>0&&startNodes.length>0&&endNodes.length>0){ vartotal=totalNodes[0].firstChild.nodeValue; varstart=startNodes[0].firstChild.nodeValue; varend=endNodes[0].firstChild.nodeValue; varcurrent=currentNodes[0].firstChild.nodeValue; pageList.push(newArray(total,start,end,current)); } } } showTable(itemList,pageList); }
如上代码就是用来处理通过Ajax异步请求Servlet后返回的XML格式的结果,其中Servlet代码在上篇中。其中itemList、pageList分别是解析返回后生成的用户List和分页导航,这样用户就可以以自己的展现方式展现数据了。
functionpageselectCallback(page_index,jq){ varpars="pageNo="+(page_index+1); $.ajax({ type:"POST", url:"UserBasicSearchServlet", cache:false, data:pars, success:showResponse }); returnfalse; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。