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 相关文章推荐
Javascript 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
javascript中innerText和innerHTML属性用法实例分析
May 13 Javascript
jQuery+正则+文本框只能输入数字的实现方法
Oct 07 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
Jan 09 Javascript
JavaScript函数节流和函数去抖知识点学习
Jul 31 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
Oct 30 Javascript
如何在Vue.js中实现标签页组件详解
Jan 02 Javascript
简单了解JavaScript异步
May 23 Javascript
Vue.js中的高级面试题及答案
Jan 13 Javascript
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 Javascript
Vue+axios封装请求实现前后端分离
Oct 23 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
python单线程实现多个定时器示例
2014/03/30 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
举例讲解Python常用模块
2019/03/08 Python
关于Numpy数据类型对象(dtype)使用详解
2019/11/27 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
SQL语言面试题
2013/08/27 面试题
幼儿园教师工作感言
2014/02/15 职场文书
物业经理自我鉴定
2014/03/03 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书