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 相关文章推荐
javascript操作符&quot;!~&quot;详解
Feb 10 Javascript
js实现仿Windows风格选项卡和按钮效果实例
May 13 Javascript
深入解读JavaScript中的Hoisting机制
Aug 12 Javascript
简单实现jQuery进度条轮播实例代码
Jun 20 Javascript
字太多用...代替的方法(两种)
Mar 15 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 Javascript
vue中如何实现变量和字符串拼接
Jun 19 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
May 29 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
Apr 04 Javascript
微信小程序实现的五星评价功能示例
Apr 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
社区(php&amp;&amp;mysql)六
2006/10/09 PHP
PHP中常用数组处理方法实例分析
2008/08/30 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
解析php中的escape函数
2013/06/29 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
python如何在循环引用中管理内存
2018/03/20 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
《晏子使楚》教学反思
2014/02/08 职场文书
成语的广告词
2014/03/19 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python