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 相关文章推荐
纯js实现的论坛常用的运行代码的效果
Jul 15 Javascript
WordPress JQuery处理沙发头像
Jun 22 Javascript
jquery 实现上下滚动效果示例代码
Aug 09 Javascript
jQuery对html元素取值与赋值的方法
Nov 20 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
Feb 27 Javascript
javascript引用类型之时间Date和数组Array
Aug 27 Javascript
原生JavaScript实现异步多文件上传
Dec 02 Javascript
深入理解react-router@4.0 使用和源码解析
May 23 Javascript
Javascript实现跨域后台设置拦截的方法详解
Aug 04 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
vue项目从node8.x升级到12.x后的问题解决
Oct 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实现即时输出、实时输出内容方法
2015/05/27 PHP
PHP生成树的方法
2015/07/28 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
Python构造函数及解构函数介绍
2015/02/26 Python
Python易忽视知识点小结
2015/05/25 Python
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
关于逃课的检讨书
2014/01/23 职场文书
主管会计岗位职责
2014/03/13 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
Python操作CSV格式文件的方法大全
2021/07/15 Python