Asp.net下使用Jquery Ajax传送和接收DataTable的代码


Posted in Javascript onSeptember 12, 2010

服务器再把GridView反构造成DataTable, 再给DataTable增加一行之后,绑定到GridView,然后发回客户端...
能不能简单一点呢?
在使用Ajax数据请求数据,通常都是简单格式,比如String,信息量较少。当然也可以请求回XML,但是XML数据冗余多,取到客户端处理比json麻烦的多。
能不能简单一点呢?
上面这些问题,如果DataTable与JSON类型可以方便的相互转换,都可以迎刃而解了。
优点:1)避免不必要的回传;
2)精简异步请求数据的大小 ;
3)解决数据量较大时,数据发送与接收繁琐的问题。
既然好处这么多,我们上代码吧。
前台代码:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script> 
<script type="text/javascript" src="js/json2.js"></script> 
<script type="text/javascript"> 
//onload 
$(function() { 
//点击botton1 
$("#botton1").click(function() { 
var url = "default.aspx?ajax=1"; 
var dtb = generateDtb(); 
//序列化对象 
var postdata = JSON.stringify(dtb); 
//异步请求 
$.post(url, { json: postdata }, function(json) { 
createTable(json); 
}, "json") 
}); 
}); 
//生成DataTable对象 
function generateDtb() { 
var dtb = new Array(); 
for (var i = 0; i < 10; i++) { 
var row = new Object(); 
row.col1 = i; 
row.col2 = i % 2 == 0 ? true : false; 
row.col3 = i + "he\nll\"ow"; 
dtb.push(row); 
} 
return dtb; 
} 
//显示Json中的数据 
function createTable(json) { 
var table = $("<table border='1'></table>"); 
for (var i = 0; i < json.length; i++) { 
o1 = json[i]; 
var row = $("<tr></tr>"); 
for (key in o1) { 
var td = $("<td></td>"); 
td.text(o1[key].toString()); 
td.appendTo(row); 
} 
row.appendTo(table); 
} 
table.appendTo($("#back")); 
} 
</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<input id="botton1" type="button" value="button" /> 
<div id="back"> 
</div> 
</div> 
</form> 
</body> 
</html>

后台代码:
/// <summary>
/// 页面加载时 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
protected void Page_Load(object sender, EventArgs e) 
{ 
//判断是否异步请求 
if (Request.QueryString["ajax"] == "1") 
{ 
ProcessRequest(); 
} 
} 
/// <summary> 
/// 处理异步请求 
/// </summary> 
private void ProcessRequest() 
{ 
Response.ContentType = "text/html"; 
string json = Request.Form["json"]; 
//反序列化DataTable 
DataTable newdtb = Json2Dtb(json); 
//序列化DataTable为JSON 
string back = Dtb2Json(newdtb); 
Response.Write(back); 
Response.End(); 
} 
/// <summary> 
/// DataTable转Json 
/// </summary> 
/// <param name="dtb"></param> 
/// <returns></returns> 
private string Dtb2Json(DataTable dtb) 
{ 
JavaScriptSerializer jss = new JavaScriptSerializer(); 
ArrayList dic = new ArrayList(); 
foreach (DataRow row in dtb.Rows) 
{ 
Dictionary<string, object> drow = new Dictionary<string, object>(); 
foreach (DataColumn col in dtb.Columns) 
{ 
drow.Add(col.ColumnName, row[col.ColumnName]); 
} 
dic.Add(drow); 
} 
return jss.Serialize(dic); 
} 
/// <summary> 
/// Json转DataTable 
/// </summary> 
/// <param name="json"></param> 
/// <returns></returns> 
private DataTable Json2Dtb(string json) 
{ 
JavaScriptSerializer jss = new JavaScriptSerializer(); 
ArrayList dic = jss.Deserialize<ArrayList>(json); 
DataTable dtb = new DataTable(); 
if (dic.Count > 0) 
{ 
foreach (Dictionary<string, object> drow in dic) 
{ 
if (dtb.Columns.Count == 0) 
{ 
foreach (string key in drow.Keys) 
{ 
dtb.Columns.Add(key, drow[key].GetType()); 
} 
} 
DataRow row = dtb.NewRow(); 
foreach (string key in drow.Keys) 
{ 
row[key] = drow[key]; 
} 
dtb.Rows.Add(row); 
} 
} 
return dtb; 
}

再附一个下载文件,觉得有用的可以下载看看
json.zip
Javascript 相关文章推荐
js函数名与form表单元素同名冲突的问题
Mar 07 Javascript
JS中JSON对象和String之间的互转及处理技巧
Apr 06 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
js实现简单的计算器功能
Jan 16 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
JavaScript实现精美个性导航栏筋斗云效果
Oct 29 Javascript
vue实现商城购物车功能
Nov 27 Javascript
vue webpack打包优化操作技巧
Feb 22 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
Dec 20 Javascript
javascript面向对象三大特征之继承实例详解
Jul 24 Javascript
npm ci命令的基本使用方法
Sep 20 Javascript
微信小程序实现简单购物车功能
Dec 30 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 #Javascript
jQuery EasyUI 的EasyLoader功能介绍
Sep 12 #Javascript
jQuery UI 应用不同Theme的办法
Sep 12 #Javascript
基于jquery的表格排序
Sep 11 #Javascript
javascript多种数据类型表格排序代码分析
Sep 11 #Javascript
javascript 触发HTML元素绑定的函数
Sep 11 #Javascript
Js组件的一些写法
Sep 10 #Javascript
You might like
php学习之运算符相关概念
2011/06/09 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
PHP编写简单的App接口
2016/08/28 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
python数据处理实战(必看篇)
2017/06/11 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
pandas中去除指定字符的实例
2018/05/18 Python
python发送邮件脚本
2018/05/22 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
Solaris操作系统的线程机制
2015/07/28 面试题
三年级科学教学反思
2014/01/29 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
购房意向书
2014/08/30 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫
Android 中的类文件和类加载器详情
2022/06/05 Java/Android
vue实现简易音乐播放器
2022/08/14 Vue.js