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 相关文章推荐
扩展String功能方法
Sep 22 Javascript
input按钮的事件处理大全
Dec 10 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
Oct 23 Javascript
JavaScript常用小技巧小结
Dec 29 Javascript
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
基于Vue的ajax公共方法(详解)
Jan 20 Javascript
layui结合form,table的全选、反选v1.0示例讲解
Aug 15 Javascript
Jquery实现无缝向上循环滚动列表的特效
Feb 13 jQuery
详解JavaScript实现动态的轮播图效果
Apr 29 Javascript
小程序实现新用户判断并跳转激活的方法
May 20 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
Feb 12 Javascript
使用vue cli4.x搭建vue项目的过程详解
May 08 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
第四节--构造函数和析构函数
2006/11/16 PHP
php除数取整示例
2014/04/24 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
jquery 循环显示div的示例代码
2013/10/18 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
js实现简单页面全屏
2019/09/17 Javascript
python实现画一颗树和一片森林
2018/06/25 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
python内存动态分配过程详解
2019/07/15 Python
python函数的作用域及关键字详解
2019/08/20 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python绘制动态水球图过程详解
2020/06/03 Python
Python字典实现伪切片功能
2020/10/28 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
赡养老人协议书
2014/04/21 职场文书
小学二年级学生评语
2014/04/21 职场文书
交通文明倡议书
2014/05/16 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
个人廉洁自律总结
2015/03/06 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技