Asp.net下使用Jquery Ajax傳送和接收DataTable的代碼
能不能簡(jiǎn)單一點(diǎn)呢?
在使用Ajax數(shù)據(jù)請(qǐng)求數(shù)據(jù),通常都是簡(jiǎn)單格式,比如String,信息量較少。當(dāng)然也可以請(qǐng)求回XML,但是XML數(shù)據(jù)冗余多,取到客戶(hù)端處理比json麻煩的多。
能不能簡(jiǎn)單一點(diǎn)呢?
上面這些問(wèn)題,如果DataTable與JSON類(lèi)型可以方便的相互轉(zhuǎn)換,都可以迎刃而解了。
優(yōu)點(diǎn):1)避免不必要的回傳;
2)精簡(jiǎn)異步請(qǐng)求數(shù)據(jù)的大小 ;
3)解決數(shù)據(jù)量較大時(shí),數(shù)據(jù)發(fā)送與接收繁瑣的問(wèn)題。
既然好處這么多,我們上代碼吧。
前臺(tái)代碼:
<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() {
//點(diǎn)擊botton1
$("#botton1").click(function() {
var url = "default.aspx?ajax=1";
var dtb = generateDtb();
//序列化對(duì)象
var postdata = JSON.stringify(dtb);
//異步請(qǐng)求
$.post(url, { json: postdata }, function(json) {
createTable(json);
}, "json")
});
});
//生成DataTable對(duì)象
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中的數(shù)據(jù)
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>
后臺(tái)代碼:
/// <summary>
/// 頁(yè)面加載時(shí)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
//判斷是否異步請(qǐng)求
if (Request.QueryString["ajax"] == "1")
{
ProcessRequest();
}
}
/// <summary>
/// 處理異步請(qǐng)求
/// </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轉(zhuǎn)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轉(zhuǎn)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;
}
再附一個(gè)下載文件,覺(jué)得有用的可以下載看看
json.zip
- JQuery中Ajax()的data參數(shù)類(lèi)型實(shí)例分析
- JQuery.Ajax()的data參數(shù)類(lèi)型實(shí)例詳解
- Jquery中ajax方法data參數(shù)的用法小結(jié)
- jQuery ajax dataType值為text json探索分享
- 使用jquery的ajax需要注意的地方dataType的設(shè)置
- JQuery DataTable刪除行后的頁(yè)面更新利用Ajax解決
- Jquery+ajax請(qǐng)求data顯示在GridView上(asp.net)
- jQuery.Ajax()的data參數(shù)類(lèi)型詳解
相關(guān)文章
jquery animate圖片模向滑動(dòng)示例代碼
jquery animate() 用于創(chuàng)建自定義動(dòng)畫(huà)的函數(shù)。這個(gè)函數(shù)的關(guān)鍵在于指定動(dòng)畫(huà)形式及結(jié)果樣式屬性對(duì)象。2011-01-01jQuery實(shí)現(xiàn)移動(dòng)端圖片上傳預(yù)覽組件的方法分析
這篇文章主要介紹了jQuery實(shí)現(xiàn)移動(dòng)端圖片上傳預(yù)覽組件的方法,結(jié)合實(shí)例形式分析了jQuery移動(dòng)端圖片上傳預(yù)覽組件的實(shí)現(xiàn)原理、核心代碼與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05jQuery的實(shí)現(xiàn)原理的模擬代碼 -1 核心部分
最近又看了一下 jQuery 1.4.2, 為了便于理解,將 jQuery 的核心使用比較簡(jiǎn)單的代碼模擬一下。方便學(xué)習(xí)。2010-08-08JQUERY 對(duì)象與DOM對(duì)象之兩者相互間的轉(zhuǎn)換
jquery對(duì)象的相應(yīng)方法DOM對(duì)象不能使用,而DOM對(duì)象的相應(yīng)方法jquery也不能使用。所以在具體項(xiàng)目中要注意Jquery對(duì)象與DOM對(duì)象的轉(zhuǎn)換問(wèn)題2009-04-04JQuery中serialize()、serializeArray()和param()方法示例介紹
serialize()方法也是作用于一個(gè)JQuery對(duì)象,它能夠?qū)OM元素內(nèi)容序列化為字符串,serializeArray()方法不是返回字符串,而是將DOM元素序列化后,返回JSON格式的數(shù)據(jù)2014-07-07基于jquery實(shí)現(xiàn)頁(yè)面滾動(dòng)到底自動(dòng)加載數(shù)據(jù)的功能
這篇文章主要為大家詳細(xì)介紹了基于jquery實(shí)現(xiàn)頁(yè)面滾動(dòng)到底自動(dòng)加載數(shù)據(jù)的功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12一款基jquery超炫的動(dòng)畫(huà)導(dǎo)航菜單可響應(yīng)單擊事件
。這款導(dǎo)航菜單,初始時(shí)頁(yè)面中間一個(gè)按鈕,單擊按鈕,菜單從左側(cè)飛入頁(yè)中。再次單擊按鈕,導(dǎo)航飛入左側(cè)消息2014-11-11jQuery插件Tooltipster實(shí)現(xiàn)漂亮的工具提示
Tooltipster是一個(gè)jQuery插件用于快速創(chuàng)建HTML5校驗(yàn)并且靈活的Tooltips。它可以通過(guò)CSS來(lái)改變外觀,箭頭的位置之后,鼠標(biāo),延遲/期間的外觀都可以被定義。2015-04-04