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 相关文章推荐
图像替换新技术 状态域方法
Jan 28 Javascript
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
Jan 11 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
May 23 Javascript
Bootstrap页面布局基础知识全面解析
Jun 13 Javascript
vue 简单自动补全的输入框的示例
Mar 12 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
Oct 10 Javascript
js实现每日签到功能
Nov 29 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
May 21 Javascript
JS Math对象与Math方法实例小结
Jul 05 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
Sep 25 Javascript
对vue中的事件穿透与禁止穿透实例详解
Oct 28 Javascript
微信小程序pinker组件使用实现自动相减日期
May 07 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的命令行命令使用指南
2015/08/18 PHP
分享PHP守护进程类
2015/12/30 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
详解vue高级特性
2020/06/09 Javascript
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
python字符类型的一些方法小结
2016/05/16 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
Python自带的IDE在哪里
2020/07/01 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
蟋蟀的住宅教学反思
2014/04/26 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
信用卡工资证明格式
2014/09/13 职场文书
新员工入职感想
2015/08/07 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python