json實(shí)現(xiàn)前后臺(tái)的相互傳值詳解
前后臺(tái)的相互傳值如果值太多,寫的麻煩累人,且容易出錯(cuò)。這里整理出一套使用標(biāo)記 標(biāo)簽屬性的辦法來(lái)傳值, 后臺(tái)取值和前臺(tái)的綁定都有了大大的簡(jiǎn)化。
一、把json對(duì)象轉(zhuǎn)成字符串
$.extend({
//將json對(duì)象轉(zhuǎn)換成字符串 [貌似jquery沒(méi)有自帶的這種方法]
toJSONString: function (object) {
if (object == null)
return;
var type = typeof object;
if ('object' == type) {
if (Array == object.constructor) type = 'array';
else if (RegExp == object.constructor) type = 'regexp';
else type = 'object';
}
switch (type) {
case 'undefined':
case 'unknown':
return;
break;
case 'function':
case 'boolean':
case 'regexp':
return object.toString();
break;
case 'number':
return isFinite(object) ? object.toString() : 'null';
break;
case 'string':
return '"' + object.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g, function () {
var a = arguments[0];
return (a == '\n') ? '\\n' : (a == '\r') ? '\\r' : (a == '\t') ? '\\t' : ""
}) + '"';
break;
case 'object':
if (object === null) return 'null';
var results = [];
for (var property in object) {
var value = $.toJSONString(object[property]);
if (value !== undefined) results.push($.toJSONString(property) + ':' + value);
}
return '{' + results.join(',') + '}';
break;
case 'array':
var results = [];
for (var i = 0; i < object.length; i++) {
var value = $.toJSONString(object[i]);
if (value !== undefined) results.push(value);
}
return '[' + results.join(',') + ']';
break;
}
}
});
二、創(chuàng)建數(shù)據(jù)容器對(duì)象 [用來(lái)綁定要傳給后臺(tái)的前臺(tái)控件值]
var DataClass = {
create: function () {
return function () {
this.MyInit.apply(this, arguments);//創(chuàng)建對(duì)象的構(gòu)造函數(shù) //arguments 參數(shù)集合 系統(tǒng)名稱 不能寫錯(cuò)
}
}
}
var MyDataPack = DataClass.create();
MyDataPack.prototype = {
//初始化
MyInit: function (url, operation, params) {
this.data = new Object(); //所有數(shù)據(jù)容量
var bdata = new Object();
bdata.url = url; //地址
bdata.operation = operation;//操作
bdata.params = params; //參數(shù)
this.data.BasicData = bdata; //基本數(shù)據(jù)
},
//添加數(shù)據(jù) 如:addValue("obj", "111");
addValue: function (p, obj) {
this.data[p] = obj;
},
//取得 所有標(biāo)記控件的值 并寫入數(shù)據(jù)
getValueSetData: function (togName) {
var values = Object(); //值的集合
$("[subtag='" + togName + "']").each(function () {
//如果是input 類型 控件
if (this.localName == "input") {
//如果是text 控件
if (this.type == "text" || this.type == "hidden") {
values[this.id] = this.value;
}
else if (this.type == "...") {
}
//......
}
else if (this.localName == "...") {
}
//................
});
this.data[togName] = values;//添加到數(shù)據(jù)集合
},
//取值 如:getValue("BasicData")
getValue: function (p) {
return this.data[p];
},
//獲取或設(shè)置url
getUrl: function (url) {
if (url)
this.data.BasicData["url"] = url;
else
return this.data.BasicData["url"];
}
,
//取值 轉(zhuǎn)成字符串的對(duì)象 數(shù)據(jù)
getJsonData: function () {
return $.toJSONString(this.data);
}
}
三、創(chuàng)建綁定前臺(tái)數(shù)據(jù)對(duì)象 [用來(lái)讀取后臺(tái)傳過(guò)來(lái)的值,并綁定到前臺(tái)頁(yè)面]
var MyDataBinder = {
//綁定數(shù)據(jù)到 控件 data:數(shù)據(jù) tag:標(biāo)簽
Bind: function (data, Tag) {
var MJson = $.parseJSON(data);
//只綁定 標(biāo)記 了的 標(biāo)簽
$("[bindtag='" + Tag + "']").each(function () {
if (this.localName == "input") {
if (MJson[this.id]) //如果后臺(tái)傳了值
$(this).attr("value", MJson[this.id]);
}
else if (this.localName == "...") {
}
//....
});
}
};
四、使用示例
前臺(tái)html:
<table>
<tr>
<th>一</th>
<th>二</th>
<th>三</th>
</tr>
<tr>
<td id="td1"><input type="text" id="inp_1" subtag="subtag" bindtag="bind" /></td>
<td id="td2"><input type="text" id="inp_2" subtag="subtag" value="我只是測(cè)試一下下" /></td>
<td><input type="text" id="inp_3" subtag="subtag" bindtag="bind" /></td>
</tr>
</table>
前臺(tái)js:
//====================使用示例======================================
var MyDataPack = new MyDataPack("Handler1.ashx", "CESHI", "");
MyDataPack.getValueSetData("subtag");//將控件數(shù)據(jù)寫入對(duì)象 “subtag”為要取 控件 值 的標(biāo)簽
//-------------------傳前臺(tái)值到后臺(tái)---------------
$.post(MyDataPack.getUrl(), MyDataPack.getJsonData(), function (data) {
//-------------------綁定后臺(tái)值到前臺(tái)-----------------
MyDataBinder.Bind(data, "bind"); //"bind" 為 要綁定控件的 標(biāo)簽
});
后臺(tái):
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//====================取前臺(tái)值=============================================
//因?yàn)楹笈_(tái)傳過(guò)來(lái)的是 json對(duì)象 轉(zhuǎn)換后的字符串 所以 所有數(shù)據(jù)都 做為一個(gè)參數(shù)傳過(guò)來(lái)了
var values = context.Request.Form[0];
//需要引入程序集System.Web.Extensions.dll
JavaScriptSerializer _jsSerializer = new JavaScriptSerializer();
//將 json 對(duì)象字符串 轉(zhuǎn)成 Dictionary 對(duì)象
Dictionary<string, Dictionary<string, string>> dic = _jsSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(values);
//現(xiàn)在 dic 里面就包含了 所有前臺(tái)傳過(guò)來(lái)的值 想怎么用 就怎么用了。
string inp_2 = dic["subtag"]["inp_2"];//這樣就直接取到了前臺(tái) 頁(yè)面 id為 inp_2 的 控件value 值
//=====================傳值到前臺(tái)============================================
Dictionary<string, string> dic2 = new Dictionary<string, string>();
dic2.Add("inp_1", "修改1");//這里只用對(duì)應(yīng)控件id 傳值即可
dic2.Add("inp_2", "修改2");
dic2.Add("inp_3", "修改3");
context.Response.Write(_jsSerializer.Serialize(dic2));
}
小伙伴們對(duì)使用json實(shí)現(xiàn)前后臺(tái)傳值是否了解清楚了呢,有問(wèn)題的話,就給我留言吧
相關(guān)文章
JSON 入門教程基礎(chǔ)篇 json入門學(xué)習(xí)筆記
剛開(kāi)始接觸json的時(shí)候感覺(jué)有點(diǎn)奇怪的命名,后來(lái)使用才發(fā)現(xiàn)這么簡(jiǎn)單而且用好用,擴(kuò)展性很強(qiáng),這里就為大家整理一下2020-09-09
如何實(shí)現(xiàn)json數(shù)據(jù)可視化詳解
最近在工作中開(kāi)發(fā)一個(gè)內(nèi)部功能時(shí)碰到的一個(gè)需求,要把json數(shù)據(jù)在頁(yè)面上展示出來(lái),平時(shí)瀏覽器會(huì)安裝jsonView這樣的擴(kuò)展來(lái)看json數(shù)據(jù),但是程序要用到的話該怎么辦呢?今天在網(wǎng)上搜索的時(shí)候,發(fā)現(xiàn)了這個(gè)小技巧,分享給大家,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧2016-11-11
json解析大全 雙引號(hào)、鍵值對(duì)不在一起的情況
這篇文章主要介紹了json解析大全 雙引號(hào)、鍵值對(duì)不在一起的情況,需要的朋友可以參考下2019-12-12
nodejs教程 安裝express及配置app.js文件的詳細(xì)步驟
express.js是nodejs的一個(gè)MVC開(kāi)發(fā)框架,并且支持jade等多種模板。下面簡(jiǎn)單來(lái)說(shuō)說(shuō)express的安裝和app.js文件的配置,然后在今后的教程中一步一步使用express.js搭建個(gè)聊天室2013-05-05
利用NodeJS的子進(jìn)程(child_process)調(diào)用系統(tǒng)命令的方法分享
child_process即子進(jìn)程可以創(chuàng)建一個(gè)系統(tǒng)子進(jìn)程并執(zhí)行shell命令,在與系統(tǒng)層面的交互上挺有用處2013-06-06
半個(gè)小時(shí)學(xué)json(json傳遞示例)
這篇文章主要介紹了半個(gè)小時(shí)學(xué)json(json傳遞示例),主要包括一維數(shù)組與二維數(shù)組,需要的朋友可以參考下2016-12-12

