jQuery getJSON()+.ashx 实现分页(改进版)


Posted in Javascript onMarch 28, 2013

参考了:https://3water.com/article/35110.htm
改进的地方:
1、ashx返回json数据,减少传输数据量,html页面样式控制也比较灵活;
2、改写html页的jQuery代码;
3、把3个ashx文件简化为1个。
一、创建表的测试数据

create table test(id int identity,title varchar(36)) 
declare @index int; 
set @index = 1; 
while(@index < 8888) 
begin 
insert test(title) values (newid()) 
set @index = @index + 1 
end

二、.html页
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
<title></title> 
<script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
Init(); 
}); 
function Init() { 
$("#Content").html(""); 
$("#pageIndex").val(0); 
$("#pageInfo").append("当前第1页"); 
$.getJSON("Handler.ashx", { type: 'first' }, function(data) { 
$("#Content").append("<tr><th style='width:130px'>id</th><th style='width:150px'>title</th></tr>"); 
$.each(data, function(i) { 
$("#Content").append("<tr><td>" + data[i].id + "</td><td>" + data[i].title + "</td></tr>"); 
}) 
}) 
} 
function Pre() { 
var currIndex = Number($("#pageIndex").val()) - 1; 
Go('pre', currIndex); 
} 
function Next() { 
var currIndex = Number($("#pageIndex").val()) + 1; 
Go('next', currIndex); 
} 
function Go(type, index) { 
$("#Content").html(""); 
$("#pageInfo").html(""); 
if (index == 0 || index == -1) { Init(); return; } 
$.getJSON("Handler.ashx", { type: type, index: index }, function(data) { 
$("#Content").append("<tr><th style='width:130px'>id</th><th style='width:150px'>title</th></tr>"); 
$.each(data, function(i) { 
$("#Content").append("<tr><td>" + data[i].id + "</td><td>" + data[i].title + "</td></tr>"); 
}) 
$("#pageInfo").append("当前第 " + (index + 1) + " 页"); 
$("#pageIndex").val(index); 
}); 
} 
</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div style="width: 100%"> 
<table id="Content" > 
</table> 
</div> 
<div id="PagePanel" style="margin-left:20px"> 
<label id="pageInfo"></label> 
<a href="#" onclick="Pre()">上一页</a>    
<a href="#" onclick="Next()">下一页</a> 
</div> 
<input type="hidden" value="0" id="pageIndex" /> 
</form> 
</body> 
</html>

三、.ashx页
public class Handler : IHttpHandler 
{ 
public void ProcessRequest(HttpContext context) 
{ 
context.Response.ContentType = "text/plain"; 
StringBuilder tb = new StringBuilder(); 
DataBase db = new DataBase(); 
int pageSize = 10; 
int pageIndex = 0; 
string type = context.Request.Params["type"]; 
switch (type) 
{ 
case "first": 
DataTable dt1 = db.GetDataSet("select top 10 * from test", null).Tables[0]; 
tb.Append(Common.DataTableToJSON(dt1, true)); //DataTable转为JSON 
break; 
case "next": 
pageIndex = Convert.ToInt32(context.Request.Params["index"]); 
DataTable dt2 = db.GetDataSet("select top " + pageSize.ToString() + " * from test where id> (select max(id) from (select top " + (pageSize * pageIndex).ToString() + " id from test) t)", null).Tables[0]; 
tb.Append(Common.DataTableToJSON(dt2, true)); 
break; 
case "pre": 
pageIndex = Convert.ToInt32(context.Request.Params["index"]); 
DataTable dt3 = db.GetDataSet("select top " + pageSize.ToString() + " * from test where id> (select max(id) from (select top " + (pageSize * pageIndex).ToString() + " id from test) t)", null).Tables[0]; 
tb.Append(JSONHelper.DataTableToJSON(dt)); 
break; 
} 
context.Response.Write(tb.ToString()); 
} 
public bool IsReusable 
{ 
get 
{ 
return false; 
} 
} 
}

四、效果
jQuery getJSON()+.ashx 实现分页(改进版) 
--------------------------------------------------------------------------------------------------------------------
备注 (2010-7-10):
用sql2005 row_number()分页方法,.ashx页面代码可简化为
public class Handler : IHttpHandler 
{ 
public void ProcessRequest(HttpContext context) 
{ 
context.Response.ContentType = "text/plain"; 
DataBase db = new DataBase(); 
int pageSize = 10; 
int pageIndex = 0; 
int.TryParse(context.Request.Params["index"], out pageIndex); 
string type = context.Request.Params["type"]; 
string sql = string.Format("select * from ( select row_number() over (order by id) as rowNum,* from test) as t " 
+ " where rowNum>{0} and rowNum<={1}", pageIndex * pageSize, (pageIndex+1) * pageSize); 
DataTable dt = db.GetDataSet(sql, null).Tables[0]; 
context.Response.Write(JSONHelper.DataTableToJSON(dt)); 
} 
public bool IsReusable 
{ 
get 
{ 
return false; 
} 
} 
}

备注
其中JSONHelper.DataTableToJSON(dt)方法为DataTable解析成JSON,见另一篇文章JSONHelper帮助类
Javascript 相关文章推荐
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
jQuery选择器源码解读(一):Sizzle方法
Mar 31 Javascript
JavaScript兼容浏览器FF/IE技巧
Aug 14 Javascript
js实现手机拍照上传功能
Jan 17 Javascript
使用Node.js搭建静态资源服务详细教程
Aug 02 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
Dec 26 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
Aug 13 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
Nov 05 Javascript
Vue中的组件及路由使用实例代码详解
May 22 Javascript
公众号SVG动画交互实战代码
May 31 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 Javascript
如何在JavaScript中正确处理变量
Dec 25 Javascript
jQuery div层的放大与缩小简单实现代码
Mar 28 #Javascript
jQuery+.net实现浏览更多内容(改编php版本)
Mar 28 #Javascript
js给onclick事件赋值,动态传参数实例解说
Mar 28 #Javascript
自定义jQuery选项卡插件实例
Mar 27 #Javascript
js数组的操作详解
Mar 27 #Javascript
jquery获取tr中控件值并操作tr实现思路
Mar 27 #Javascript
css transform 3D幻灯片特效实现步骤解读
Mar 27 #Javascript
You might like
PHP实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
javascript 日期常用的方法
2009/11/11 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
意大利团购网站:Groupon意大利
2016/10/11 全球购物
Ref与out有什么不同
2012/11/24 面试题
90后毕业生的求职信范文
2013/09/21 职场文书
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
体育专业个人求职信范文
2013/12/27 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
四议两公开实施方案
2014/03/28 职场文书
小学二年级学生评语
2014/04/21 职场文书
医院见习报告范文
2014/11/03 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
银行求职信模板
2015/03/20 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS