在使用Ajax数据请求数据,通常都是简单格式,比如String,信息量较少。当然也可以请求回XML,但是XML数据冗余多,取到客户端处理比json麻烦的多。能不能简单一点呢?
优点:1)避免不必要的回传;2)精简异步请求数据的大小 ;3)解决数据量较大时,数据发送与接收繁琐的问题。
前台代码:
<</span>html xmlns="http://www.w3.org/1999/xhtml">
<</span>head runat="server">
<</span>title></</span>title>
<</span>script type="text/javascript" src="js/jquery-1.4.2.min.js"></</span>script>
<</span>script type="text/javascript" src="js/json2.js"></</span>script>
<</span>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 <</span> 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 = $("<</span>table border='1'><</span>/table>");
for (var i = 0; i <</span> json.length; i++) {
o1 = json[i];
var row = $("");
for (key in o1) {
var td = $("");
td.text(o1[key].toString());
td.appendTo(row);
}
row.appendTo(table);
}
table.appendTo($("#back"));
}
</</span>script>
</</span>head>
<</span>body>
<</span>form id="form1" runat="server">
<</span>div>
<</span>input id="botton1" type="button" value="button" />
<</span>div id="back">
</</span>div>
</</span>div>
</</span>form>
</</span>body>
</</span>html>
///
/// 页面加载时
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
//判断是否异步请求
if (Request.QueryString["ajax"] == "1")
{
ProcessRequest();
}
}
///
/// 处理异步请求
///
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();
}
///
/// DataTable转Json
///
///
///
private string Dtb2Json(DataTable dtb)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = new ArrayList();
foreach (DataRow row in dtb.Rows)
{
Dictionary<</span>string, object> drow = new Dictionary<</span>string, object>();
foreach (DataColumn col in dtb.Columns)
{
drow.Add(col.ColumnName, row[col.ColumnName]);
}
dic.Add(drow);
}
return jss.Serialize(dic);
}
///
/// Json转DataTable
///
///
///
private DataTable Json2Dtb(string json)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = jss.Deserialize<</span>ArrayList>(json);
DataTable dtb = new DataTable();
if (dic.Count > 0)
{
foreach (Dictionary<</span>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;
}
<</span>head
</</span>head>
<</span>body>
</</span>body>
</</span>html>
后台代码:
本文介绍了一种在前端使用JSON与DataTable互相转换的方法,通过这种方式可以简化动态添加表格行数的过程,并减少数据传输的大小。
964

被折叠的 条评论
为什么被折叠?



