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 相关文章推荐
Notify - 基于jquery的消息通知插件
Oct 18 Javascript
JS+JSP checkBox 全选具体实现
Jan 02 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
基于JS实现的倒计时程序实例
Jul 24 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
Nov 02 Javascript
JavaScript面试题大全(推荐)
Sep 22 Javascript
微信小程序 wxapp内容组件 progress详细介绍
Oct 31 Javascript
微信小程序 http请求的session管理
Jun 07 Javascript
利用node.js制作命令行工具方法教程(一)
Jun 22 Javascript
vue组件挂载到全局方法的示例代码
Aug 02 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
JavaScript实现简单拖拽效果
Sep 15 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
几个学习PHP的网址
2006/11/25 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
JS控制表格隔行变色
2006/06/26 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
Python进程间通信之共享内存详解
2017/10/30 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
Final类有什么特点
2012/04/25 面试题
考博专家推荐信模板
2013/12/02 职场文书
新农村建设典型材料
2014/05/31 职场文书
品牌服务方案
2014/06/03 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
离婚协议书怎么写
2015/01/26 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
律政俏佳人观后感
2015/06/09 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
你会写请假条吗?
2019/06/26 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android