Asp.net使用JQuery实现评论的无刷新分页及分段延迟加载效果

首先建立数据库,数据关系图如下:

本文要实现的效果就是在评论别人文章时,如果文章内容过长或者评论内容过长,实现的一个评论分段延迟加载的效果,即每页可显示30条评论,可每隔10条延迟加载一次以提高网页传输显示效率。

 

我所实现的页面延迟的原理如下图,就是求出X的距离小于100时进行加载延迟的评论,然后又设置了一个标记位,用来判断延迟加载了多少次,每页仅能加载30条评论记录。

 

 

然后再评论末端加载上页码实现无刷新进行分页的效果。

分页的方法也是比较简单的,这里自己实现了一个存储过程,使用到row_number()函数:

 

 

就是输入一个起始位置的参数和结束位置的参数,取出中间的数据。

这样,在程序中就好取出数据了,比如:我第一页就是要1-30的数据,就让startindex=1,endindex=30就行了;第二页就是31-60的数据,同理。

 

LoadArticle.ashx:一个一般处理程序,用来加载文章内容,源代码如下:

 

 

LoadCommentAndPaging.ashx:也是一个一般处理程序,用于加载评论,源代码如下:

 

CommnetPage.htm:最后是前台页面的JQuery代码

 

001 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
002 <html xmlns="http://www.w3.org/1999/xhtml">
003 <head>
004     <title></title>
005     <link href="Style/StyleSheet1.css" rel="stylesheet" type="text/css" />
006     <script src="JS/jquery-1.4.2.min.js" type="text/javascript"></script>
007     <script type="text/javascript">
008         $(function () {
009   
010             //加载文章内容
011             $.post("LoadArticle.ashx", { "article": "1" }, function (data, state) {
012                 if (state == "success") {
013   
014                     //利用"|"来分隔标题和正文
015                     var article = data.split("|");
016                     $("#article h3").text(article[0]);
017                     $("#article").append(article[1]);
018                 }
019             });
020   
021             //加载初始的10条评论条数
022             $.post("LoadCommentAndPaging.ashx", { "action": "load" }, function (data, state) {
023                 if (state == "success") {
024                     var comments = $.parseJSON(data);
025   
026                     for (var i = 0; i < comments.length; i++) {
027                         var comment = "<tr><td>" + comments[i].Username + "说:</td><td>" + comments[i].Commentz + "</td></tr>";
028                         $("#comment").append(comment);
029                     }
030                 }
031             });
032         });
033   
034         //标记页面延迟数
035         var flag = 1;
036   
037         //标记当前页面
038         var currentpage = 1;
039   
040         //监测是否需要加载评论
041         function check(n) {
042   
043             //监测浏览器的模式,根据不同的模式获取客户端高度会有不同
044             var dom = document.compatMode == "CSS1Compat" ? document.documentElement : document.body;
045             var pre = document.getElementById("preload");
046   
047             //获取滚动条离顶端的高度,用IE测试时是用
048             //documentElement.scrollTop获取高度,
049             //而在用chrome测试时是body.scrollTop获取高度
050             var scrtop = dom.scrollTop || document.body.scrollTop;
051   
052             //传入的参数为当前页数,保存为全局变量
053             currentpage = n;
054   
055             //当客户端显示窗口离标记的地方小于100距离时开始加载
056             if (pre.offsetTop - (dom.clientHeight + scrtop) < 100) {
057                 $.post("LoadCommentAndPaging.ashx", { "action": "pageOrlazy", "page": currentpage, "count": flag }, function (data, state) {
058                     if (state == "success") {
059                         var comments = $.parseJSON(data);
060                         for (var i = 0; i < comments.length; i++) {
061                             var comment = "<tr><td>" + comments[i].Username + "说:</td><td>" + comments[i].Commentz + "</td></tr>";
062                             $("#comment").append(comment);
063                         }
064                     }
065                 });
066   
067                 flag = flag + 1;
068   
069                 //如果加载多于3次了则不加载评论了,加载页码
070                 if (flag <= 2) {
071                     setTimeout("check(currentpage)", 2000);
072                 }
073                 else {
074                     //加载页码
075                     $.post("LoadCommentAndPaging.ashx", { "action": "pagenumber" }, function (data, state) {
076                         if (state == "success") {
077                             var count = parseInt(data, 10);
078   
079                             for (var i = 1; i <= count + 1; i++) {
080                                 var control;
081   
082                                 //等于当前页时则不显示超链接
083                                 if (i != currentpage) {
084                                     control = "<td><a href=''>" + i + "</a></td>";
085                                 }
086                                 else {
087                                     control = "<td>" + i + "</td>";
088                                 }
089   
090   
091                                 $("#anchorlink").append(control);
092   
093   
094                             }
095                             //加载分页点击时的事件
096                             $("#anchorlink td").click(function (e) {
097                                 e.preventDefault();  //阻止超链接的转向
098                                 $("#comment").empty();  //将评论区清空
099                                 $("#anchorlink").empty();  //将页码清空
100                                 $("#preload").text("评论正在加载中...");  
101                                 flag = 0;
102                                 var page = parseInt($(this).text());
103                                 check(page);
104   
105                             });
106   
107                         }
108                     });
109                     //去掉“评论加载中”的显示
110                     $("#preload").text("");
111                 }
112             }
113             else {
114                 setTimeout("check(currentpage)", 2000);
115             }
116   
117         }
118   
119         //每隔两秒检查一下页面是否需要加载评论
120         setTimeout("check(currentpage)", 2000);
121   
122     </script>
123 </head>
124 <body>
125     <div id="main">
126         <div id="article">
127             <h3>
128             </h3>
129         </div>
130         <div>
131             <table id="comment">
132             </table>
133             <p id="preload">
134                 评论正在加载中...</p>
135             <table>
136                 <tr id="anchorlink">
137                 </tr>
138             </table>
139         </div>
140     </div>
141 </body>
142 </html>

 

posted @ 2010-10-03 23:15  rob_2010  阅读(190)  评论(1)    收藏  举报