JSON

Ajax+Js+Dom+Json无刷新分页技术

字号+ 作者:H5之家 来源:H5之家 2018-01-28 15:01 我要评论( )

Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等; 对串流媒体的支持没有FLASH、Ja

Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等;
对串流媒体的支持没有FLASH、Java Applet好。

说了那么多,还是上真货,分析代码:

客户端代码:

Code:

  • <?php include("../include/dbconn.php"); //定义分页时每页显示的条数 $PAGESIZE=15; //得到最大页 $sql="select count(*) from area"; $rs=mysql_query($sql); //得到查询的结果 $rowsNum=mysql_result($rs,0); //得到总页数 $maxPage=ceil($rowsNum/$PAGESIZE); //判断是否存在当前页值,如果存在,则当前页等于接收到得值,用于显示下面的“滑坨”起始判断 //if($_GET['nowpage']){ //$nowpage=$_GET['nowpage']; //}else{ //不存在则设置当前页为1 // $nowpage=1; //} ?>
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style> .list{ width:750px; height:460px; background-color:#99FF66; overflow:auto; border:#0000FF 1px dotted; margin:0 auto; } .pageNum{ width:750px; height:30px; background-color: #999999; overflow:auto; border:#0000FF 1px dotted; margin:0 auto; text-align:center; } </style> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> <script language="javascript" type="text/javascript" src="../include/ajax.js"></script> <script language="javascript" type="text/javascript"> var nowpage=1; var totalPage=<?php echo $maxPage; ?>; var startPage=1; var endPage=totalPage; function initPage(){ var pageStr=""; //判断总页数是否大于11,如果小于11,不处理起始、最终页码 if(totalPage>11){ //判断当前页-10是否存在,如果不存在则不设置 起始页码 if(nowpage-10>0){ startPage=nowpage-10; } //判断当前页+9是否超过总页数,如过没有超过,则设置最终页码 if(nowpage+9<totalPage){ //设置 最终页码 endPage=nowpage+9; }else{ //解决最后几页不显示的问题 endPage=totalPage; } } //判断是否显示上一页 if(nowpage!=1){ pageStr+=" <a href=javascript:void(0) onclick=getDataPage("+(nowpage-1)+") >上一页</a>"; } for(var i=startPage;i<=endPage;i++){ pageStr+=" <a href=javascript:void(0) onclick=getDataPage("+i+")>"; //判断是否加粗显示 if(nowpage==i){ //设置加粗显示 pageStr+="<b><font color=yellow>"+i+"</font></b>"; }else{ pageStr+=i; } pageStr+="</a>"; } //判断是否显示下一页 if(nowpage<totalPage){ pageStr+=" <a href=javascript:void(0) onclick=getDataPage("+(nowpage+1)+")>下一页</a>"; } //将当前的字符串显示到div中 document.getElementById("pageNum").innerHTML=pageStr; } /* 调用ajax引擎,根据页码查询数据库,返回当前的信息 */ function getDataPage(Page){ //定义url var url="./getDataPage2.php"; //定义变量 var params="nowPage="+Page+"&pageSize="+<?php echo $PAGESIZE ?>; //调用ajax引擎,并制定函数处理服务器返回的结果 ajaxget(url,params,getDataPageProcess); } /* 处理服务器返回的数据,并显示出来 */ function getDataPageProcess(xhr){ //重新初始化开始页 startPage=1; //将json字符串转换为对象 var responseObj=eval("("+xhr.responseText+")"); //接收并设置当前页 nowpage=parseInt(responseObj.nowPage); //重新初始化一下页码显示 initPage(); //显示出所有的数据 var liststr="<table> <tr> <th>id</th> <th>名称</th> <th>拼音</th> <th>编码</th> <th>缩写</th> </tr>"; for(var i=0;i<responseObj.areas.length;i++){ liststr+="<tr> <td>"+responseObj.areas[i].id+"</td> <td>"+responseObj.areas[i].name+"</td> <td>"+responseObj.areas[i].p+"</td> <td>"+responseObj.areas[i].code+"</td> <td>"+responseObj.areas[i].l+"</td> </tr>"; } liststr+="</table>"; //将拼接完成的table字符串 显示在id为list的div中 document.getElementById("list").innerHTML=liststr; } </script> </head> <body> <div></div> <div></div> </body> </html>

    客户端通过每次传递当前页和每页显示的数据大小到服务器端,服务器端接受参数并按照分页算法,查询对应的数据,并且返回Json格式的字符串,客户端根据服务端返回的Json字符串,通过使用eval方法转换为对象并存放到resopnseObj变量中,则我们可以通过访问responseObj访问查询的数据,最后使用javascript Dom中对象的innerHTML的方法实现数据的显示

    服务端代码如下:

    Code:
    <?php //连接数据库 include("../include/dbconn.php"); //接收参数,获取当前页 $nowPage=$_GET['nowPage']; $pageSize=$_GET['pageSize']; //根据当前页,分页查询 $sql="select id,name,p,code,l from area limit ".($nowPage-1)*$pageSize.",".$pageSize; //执行查询操作 $rs=mysql_query($sql); //封装成**数组 $arr =array(); while($rows=mysql_fetch_assoc($rs)){ //每一行数据封装到$arr中,形成的是一个二维数组 $arr[] = $rows; } $arr2=array("nowPage"=>$nowPage,"areas"=>$arr); //arr2("nowPage"=>$nowPage,"areas"=>arr(row("id"=>,"name"=>,....),array("id"=>,"name"=>,....))) //转换成json字符串 echo json_encode($arr2); ?>

    以上代码简单清晰,难点在于服务器端如何封装json格式的字符串,但是本文注释比较全了,应该能看明白。

    另外,本分页算法只要稍加改动服务器端数据就可以实现,Asp、jsp、.NET的通用。

    效果图:

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Jpage分页+Hibernate+Ajax+jquery+JSON通用技术二

      Jpage分页+Hibernate+Ajax+jquery+JSON通用技术二

      2018-01-28 15:00

    • 使用Jquery+Ajax+Json如何实现分页显示附JAVA+JQuery实现异步分

      使用Jquery+Ajax+Json如何实现分页显示附JAVA+JQuery实现异步分

      2018-01-21 18:13

    • asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码

      asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的

      2018-01-17 12:03

    • thinkPHP5使用laypage分页插件实现列表分页功能

      thinkPHP5使用laypage分页插件实现列表分页功能

      2017-12-06 18:26

    网友点评