jquery+json实现分页效果


Posted in Javascript onMarch 07, 2016

Json作为一种轻量级的数据交换格式,由于其传输数据格式的方便性,今天偶然想将其应用于分页实现,分页做为web开发一个长久的话题,其应用的高效与重要性就不多说了
本文主要技术:反射机制,Json数据格式,jquery
为了应用的通用性,首先要根据反射机制,能将要返回的任意类型的结果对象转化成Json类型的格式。

public static String toJSON(Object obj) {
HashMap map = new HashMap();
Class c = obj.getClass();
// 利用反射机 制,把里面所有的属性,反射出来使用,这样放入任何一个对象, 都可以找到他们的属性,
// 把这些属性的名,和属性的值,封装成一个map里,
Field[] fields = c.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
try {
fields[i].setAccessible(true);
Object o = fields[i].get(obj);
i f (o instanceof Number) {
map.put(""" + name + """, o.toString());
} else if (o instanceof String) {
map.put(""" + name + """, """ + o.toString() + """);
}
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
}
/ / 把map对象变成字符串
// 这些格式还需要把=变成:
String s = map.toString();
/ /System.out.println(s);
String str = s.replaceAll(""=", "":");
//System.out.println(str);
return str;
}

将要返回的多个对象转换成Json类型的对象后,最后应加上分页的信息,最终将多个Json字符串,转化成一整个Json类型

{"0":{"id":"0", "name":"dong0", "age":21},
"1":{"id":"1", "name":"dong1", "age":21},
"2":{"id":"2", "name":"dong2", "age":21},
"3":{"id":"3", "name":"dong3", "age":21},
"4":{"id":"4", "name":"dong4", "age":21},
"5":{"id":"5", "name":"dong5", "age":21},
"6":{"id":"6", "name":"dong6", "age":21},
"7":{"id":"7", "name":"dong7", "age":21},
"8":{"id":"8", "name":"dong8", "age":21},
"9":{"id":"9", "name":"dong9", "age":21},
"10":{"firstPage":1, "currentPage":1, 
"default_Record_Num":10, "lastPage":10, "frontPage":1, "sum":100, "nextPage":2},
"length":11}

当信息发送到客户端时 ,只用jquery接收对象的数据就行了 ,这样 可以实现前台的样式与后台传送的数据分离,更加简化了代码

$.getJSON("result.jsp?page="+p, function(json)
{
$("#show").html("<tr><th>用户ID</th><th>用户名</th><th>用户年龄</th></tr>");
for(var i=0 ; i<json.length-1; i++){
$("#show").append("<tr><td>"+json[i]["id"]+"</td><td>"+json[i]["name"]+"</ td><td>"
+json[i]["age"]+"</td></tr>");
}
$("#currentPage").attr("value",json[json.length-1]["currentPage"]);
$("#pageCount").attr("value",json[json.length-1]["lastPage"]);
});

利用JQuery与JSon实现的无刷新分页代码,具体代码如下

需要四个文件
一个实体类文件 CategoryInfoModel.cs
一个SqlHelper SQLHelper.cs
一个AJAX服务端处理程序 PagedService.ashx
一个客户端调用页面 WSXFY.htm
CategoryInfoModel.cs和SQLHelper.cs我就不写了,都知道是什么文件
PagedService.ashx 代码如下

using System.Web.Script.Serialization; 
public void ProcessRequest(HttpContext context) 
{ 
context.Response.ContentType = "text/plain"; 
string strAction = context.Request["Action"]; 
//取页数 
if (strAction == "GetPageCount") 
{ 
string strSQL = "SELECT COUNT(*) FROM CategoryInfo"; 
int intRecordCount = SqlHelper.ExecuteScalar(strSQL); 
int intPageCount = intRecordCount / 10; 
if (intRecordCount % 10 != 0) 
{ 
intPageCount++; 
} 
context.Response.Write(intPageCount); 
}//取每页数据 
else if (strAction == "GetPageData") 
{ 
string strPageNum = context.Request["PageNum"]; 
int intPageNum = Convert.ToInt32(strPageNum); 
int intStartRowIndex = (intPageNum - 1) * 10 + 1; 
int intEndRowIndex = (intPageNum) * 10 + 1; 
string strSQL = "SELECT * FROM ( SELECT ID,CategoryName,Row_Number() OVER(ORDER BY ID ASC) AS rownum FROM CategoryInfo) AS t"; 
strSQL += " WHERE t.rownum >= " + intStartRowIndex + " AND t.rownum <= " + intEndRowIndex; 
DataSet ds = new DataSet(); 
SqlConnection conn = SqlHelper.GetConnection(); 
ds = SqlHelper.ExecuteDataset(conn, CommandType.Text, strSQL); 
List<CategoryInfoModel> categoryinfo_list = new List<CategoryInfoModel>();//定义实体集合 
for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
{ 
CategoryInfoModel categoryinfo = new CategoryInfoModel(); 
categoryinfo.CategoryInfoID = Convert.ToInt32(ds.Tables[0].Rows[i]["ID"]); 
categoryinfo.CategoryName = ds.Tables[0].Rows[i]["CategoryName"].ToString(); 
categoryinfo_list.Add(categoryinfo); 
} 
JavaScriptSerializer jss = new JavaScriptSerializer(); 
context.Response.Write(jss.Serialize(categoryinfo_list));//序列化实体集合为javascript对象 
} 
}

WSXFY.htm 代码如下

<head> 
<title>无刷新分页</title> 
<script type="text/javascript" src="../Scripts/jquery-1.5.1.min.js"></script> 
<script type="text/javascript"> 
$(function () { 
$.post("PagedService.ashx", { "Action": "GetPageCount" }, function (response, status) { 
for (var i = 1; i <= response; i++) { 
var td = $("<td><a href=''>" + i + "</a></td>"); 
$("#trPage").append(td); 
td.click(function (e) { 
e.preventDefault(); //不要导向链接 
$.post("PagedService.ashx", { "Action": "GetPageData", "PageNum":$(this).text() }, function (response, status) { 
var categorys = $.parseJSON(response); 
$("#ulCategory").empty(); 
for (var i = 0; i < categorys.length; i++) { 
var category = categorys[i]; 
var li = $("<li>" + category.CategoryInfoID + "-" + category.CategoryName + "</li>"); 
$("#ulCategory").append(li); 
} 
}); 
}); 
} 
}); 
}); 
</script> 
</head> 
<body> 
<ul id="ulCategory"></ul> 
<table> 
<tr id="trPage"> 
</tr> 
</table> 
</body> 
</html>

以上就是本文的全部内容,希望能够帮助大家实现分页效果。

Javascript 相关文章推荐
ArrayList类(增强版)
Apr 04 Javascript
document.designMode的功能与使用方法介绍
Nov 22 Javascript
javascript offsetX与layerX区别
Mar 12 Javascript
基于jquery的商品展示放大镜
Aug 07 Javascript
Javascript验证方法大全
Sep 21 Javascript
jquery淡入淡出效果简单实例
Jan 14 Javascript
JS实现隔行换色的表格排序
Mar 27 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
Aug 15 jQuery
vue实现word,pdf文件的导出功能
Jul 31 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
Jul 24 Javascript
通过实例了解Render Props回调地狱解决方案
Nov 04 Javascript
vue实现登录功能
Dec 31 Vue.js
利用JQuery写一个简单的异步分页插件
Mar 07 #Javascript
基于jquery编写分页插件
Mar 07 #Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
Mar 07 #Javascript
javascript特殊日历控件分享
Mar 07 #Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
Mar 07 #Javascript
论JavaScript模块化编程
Mar 07 #Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
Mar 07 #Javascript
You might like
PHP HTML代码串截取代码
2008/12/29 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
php生成验证码函数
2015/10/20 PHP
php图片上传类 附调用方法
2016/05/15 PHP
PHP fclose函数用法总结
2019/02/15 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用递归解决全排列数字示例
2014/02/11 Python
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
python对于requests的封装方法详解
2019/01/03 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
大学生水文观测实习自我鉴定
2013/09/29 职场文书
商务英语专业应届毕业生求职信
2013/10/28 职场文书
项目建议书
2015/02/04 职场文书
党员自我评价范文2015
2015/03/03 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
小学生家长意见
2015/06/03 职场文书
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python