父子窗體間傳遞JSON格式的數(shù)據(jù)的代碼
更新時(shí)間:2010年12月25日 22:32:16 作者:
在開(kāi)發(fā)的項(xiàng)目中,遇到這樣一個(gè)例子:當(dāng)用戶選擇某一個(gè)用戶名時(shí),彈出當(dāng)前用戶的評(píng)分卷,該評(píng)分卷列出了所有一級(jí)評(píng)分項(xiàng),讓用戶進(jìn)行評(píng)分操作。
如果某個(gè)一級(jí)評(píng)分項(xiàng)包含評(píng)分子項(xiàng),則點(diǎn)擊該評(píng)分項(xiàng)時(shí),再?gòu)棾鲆粋€(gè)新窗口,新窗體中列出了當(dāng)前評(píng)分項(xiàng)的所有評(píng)分子項(xiàng)列表,供用戶進(jìn)行操作。用戶操作完成后,點(diǎn)擊“確定”按鈕,則返回到父窗體,在子窗體中所有的操作結(jié)果,同時(shí)要帶到父窗體中。同時(shí),如果用戶再次點(diǎn)擊該評(píng)分項(xiàng),則在彈出子窗體的同時(shí),要將上次操作的結(jié)果綁定到對(duì)應(yīng)的操作項(xiàng)上。
上面描述的例子,就涉及到了一個(gè)父子窗體間的數(shù)據(jù)傳遞。如何實(shí)現(xiàn)這一數(shù)據(jù)傳遞,當(dāng)然有很多方法。這里只是記錄一下在這個(gè)例子中我使用的方法。我的方法是在子窗體點(diǎn)擊“確定”按鈕時(shí),將操作結(jié)果構(gòu)造成json格式的字符串,通過(guò)調(diào)用父窗體上的方法:opener.方法(),將json格式數(shù)據(jù)傳遞到父窗體上。
此例中構(gòu)造的json數(shù)據(jù)類似如下格式:
{"MyData":[
{"bh":"111","lx":"1","df":"10","bz":"aaa"},
{"bh":"112","lx":"2","df":"20","bz":"bbb"},
{"bh":"113","lx":"2","df":"30","bz":"ccc"}
]}
此處子項(xiàng)打分需要保持的分別是bh:編號(hào);lx:類型;df:得分;bz:備注。
按照自己的需要,可以再自己增加需要保持的項(xiàng)。構(gòu)造此json數(shù)據(jù)可以放在前臺(tái),也可以放在后臺(tái)。
在此例中,我是放置后臺(tái)的。代碼如下:
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("@{\"");
jsonBuilder.Append("MyData");
jsonBuilder.Append("\":[");
int k = bh.Split(',').Length + 1;
for (int i = 0; i < bh.Split(',').Length; i++)
{
tem += "update KH_PFX set DF = '"+EncriptLib.EncriptLib.EncodeCode(Convert.ToDouble(df.Split(',')[i].ToString().Trim()))+"',";
tem += "BZ = '"+bz.Split(',')[i].ToString().Trim()+"',PFRXM = '"+Session["XM"].ToString()+"',";
tem += "PFRBH = '"+Session["YHBH"].ToString()+"',PFRQ = to_date('"+DateTime.Now.ToShortDateString()+"','yyyy-MM-dd')";
tem += " where BH = '"+bh.Split(',')[i].ToString().Trim()+"'";
tem += "卐"; //此處用此特殊的符號(hào)來(lái)分隔sql語(yǔ)句
jsonBuilder.Append("{\"bh\":" + "\"" + bh.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"lx\":" + "\"" + lx.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"df\":" + "\"" + df.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"bz\":" + "\"" + bz.Split(',')[i].ToString().Trim() + "\"" + "},");
}
if(tem != "")
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
jsonBuilder.Append("}");
Page.ClientScript.RegisterClientScriptBlock(GetType(), "cg", "<Script>window.close();opener.GetZXDF('zxdf" + Request.QueryString["bh"].ToString() + "','" + parent_df.Text.Trim() + "','" + jsonBuilder.ToString() + "',\"" + tem + "\");</Script>");
}
"@"符號(hào)可以防止在jsonBuilder.ToString()后,轉(zhuǎn)義字符“\”的消失。
調(diào)用父窗體的GetZXDF()方法,將json數(shù)據(jù)傳遞給父窗體。
下面給出子窗體加載時(shí),綁定json數(shù)據(jù)的代碼
$(function() {
//加載時(shí)獲取json,然后綁定打分結(jié)果
var obj = opener.GetJson($("#txt_YCBH").val());
if($.trim(obj) != ""){
obj = "(" + obj + ")";
obj = eval(obj);
var data = obj.MyData;
$.each(data, function(i, n) {
if(n.lx == "1"){
//直接打分類的綁定
$("#lx" + n.bh).siblings("input").eq(0).val(n.df);
$("#lx" + n.bh).siblings("input").eq(1).val(n.df);
$("#lx" + n.bh).parent().parent().next().children().children("textarea").val(n.bz);
}
if(n.lx == "2"){
//選項(xiàng)打分類的綁定
$("#lx" + n.bh).siblings("input:text").eq(1).val(n.df);
$("#lx" + n.bh).siblings("input:checkbox").each(function(){
if($.trim($(this).val()) == $.trim(n.df)){
$(this).attr("checked",true);
}
});
$("#lx" + n.bh).parent().parent().parent().next().children().children("textarea").val(n.bz);
}
});
opener.GetJson()方法是父窗體上用來(lái)向子窗體傳遞json數(shù)據(jù)的方法,代碼如下:
//通過(guò)編號(hào)獲取對(duì)應(yīng)評(píng)分項(xiàng)的子項(xiàng)打分結(jié)果的json字符串
function GetJson(p_bh)
{
//$("#zxdf" + p_bh).siblings("input").eq(1).val()中保存的就是子窗體傳遞給父窗體的json數(shù)據(jù)
return $("#zxdf" + p_bh).siblings("input").eq(1).val();
}
上面描述的例子,就涉及到了一個(gè)父子窗體間的數(shù)據(jù)傳遞。如何實(shí)現(xiàn)這一數(shù)據(jù)傳遞,當(dāng)然有很多方法。這里只是記錄一下在這個(gè)例子中我使用的方法。我的方法是在子窗體點(diǎn)擊“確定”按鈕時(shí),將操作結(jié)果構(gòu)造成json格式的字符串,通過(guò)調(diào)用父窗體上的方法:opener.方法(),將json格式數(shù)據(jù)傳遞到父窗體上。
此例中構(gòu)造的json數(shù)據(jù)類似如下格式:
{"MyData":[
{"bh":"111","lx":"1","df":"10","bz":"aaa"},
{"bh":"112","lx":"2","df":"20","bz":"bbb"},
{"bh":"113","lx":"2","df":"30","bz":"ccc"}
]}
此處子項(xiàng)打分需要保持的分別是bh:編號(hào);lx:類型;df:得分;bz:備注。
按照自己的需要,可以再自己增加需要保持的項(xiàng)。構(gòu)造此json數(shù)據(jù)可以放在前臺(tái),也可以放在后臺(tái)。
在此例中,我是放置后臺(tái)的。代碼如下:
復(fù)制代碼 代碼如下:
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("@{\"");
jsonBuilder.Append("MyData");
jsonBuilder.Append("\":[");
int k = bh.Split(',').Length + 1;
for (int i = 0; i < bh.Split(',').Length; i++)
{
tem += "update KH_PFX set DF = '"+EncriptLib.EncriptLib.EncodeCode(Convert.ToDouble(df.Split(',')[i].ToString().Trim()))+"',";
tem += "BZ = '"+bz.Split(',')[i].ToString().Trim()+"',PFRXM = '"+Session["XM"].ToString()+"',";
tem += "PFRBH = '"+Session["YHBH"].ToString()+"',PFRQ = to_date('"+DateTime.Now.ToShortDateString()+"','yyyy-MM-dd')";
tem += " where BH = '"+bh.Split(',')[i].ToString().Trim()+"'";
tem += "卐"; //此處用此特殊的符號(hào)來(lái)分隔sql語(yǔ)句
jsonBuilder.Append("{\"bh\":" + "\"" + bh.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"lx\":" + "\"" + lx.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"df\":" + "\"" + df.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"bz\":" + "\"" + bz.Split(',')[i].ToString().Trim() + "\"" + "},");
}
if(tem != "")
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
jsonBuilder.Append("}");
Page.ClientScript.RegisterClientScriptBlock(GetType(), "cg", "<Script>window.close();opener.GetZXDF('zxdf" + Request.QueryString["bh"].ToString() + "','" + parent_df.Text.Trim() + "','" + jsonBuilder.ToString() + "',\"" + tem + "\");</Script>");
}
"@"符號(hào)可以防止在jsonBuilder.ToString()后,轉(zhuǎn)義字符“\”的消失。
調(diào)用父窗體的GetZXDF()方法,將json數(shù)據(jù)傳遞給父窗體。
下面給出子窗體加載時(shí),綁定json數(shù)據(jù)的代碼
復(fù)制代碼 代碼如下:
$(function() {
//加載時(shí)獲取json,然后綁定打分結(jié)果
var obj = opener.GetJson($("#txt_YCBH").val());
if($.trim(obj) != ""){
obj = "(" + obj + ")";
obj = eval(obj);
var data = obj.MyData;
$.each(data, function(i, n) {
if(n.lx == "1"){
//直接打分類的綁定
$("#lx" + n.bh).siblings("input").eq(0).val(n.df);
$("#lx" + n.bh).siblings("input").eq(1).val(n.df);
$("#lx" + n.bh).parent().parent().next().children().children("textarea").val(n.bz);
}
if(n.lx == "2"){
//選項(xiàng)打分類的綁定
$("#lx" + n.bh).siblings("input:text").eq(1).val(n.df);
$("#lx" + n.bh).siblings("input:checkbox").each(function(){
if($.trim($(this).val()) == $.trim(n.df)){
$(this).attr("checked",true);
}
});
$("#lx" + n.bh).parent().parent().parent().next().children().children("textarea").val(n.bz);
}
});
opener.GetJson()方法是父窗體上用來(lái)向子窗體傳遞json數(shù)據(jù)的方法,代碼如下:
復(fù)制代碼 代碼如下:
//通過(guò)編號(hào)獲取對(duì)應(yīng)評(píng)分項(xiàng)的子項(xiàng)打分結(jié)果的json字符串
function GetJson(p_bh)
{
//$("#zxdf" + p_bh).siblings("input").eq(1).val()中保存的就是子窗體傳遞給父窗體的json數(shù)據(jù)
return $("#zxdf" + p_bh).siblings("input").eq(1).val();
}
您可能感興趣的文章:
- javascript用DIV模擬彈出窗口_窗體滾動(dòng)跟隨
- Javascript 兩個(gè)窗體之間傳值實(shí)現(xiàn)代碼
- Javascript showModalDialog兩個(gè)窗體之間傳值
- javascript 通過(guò)封裝div方式彈出div窗體
- JavaScript 彈出窗體點(diǎn)擊按鈕返回選擇數(shù)據(jù)的實(shí)現(xiàn)
- javascript 子窗體父窗體相互傳值方法
- js關(guān)閉子窗體刷新父窗體實(shí)現(xiàn)方法
- 利用javaScript實(shí)現(xiàn)點(diǎn)擊輸入框彈出窗體選擇信息
- 鼠標(biāo)拖拽移動(dòng)子窗體的JS實(shí)現(xiàn)
- Ext JS動(dòng)態(tài)加載JavaScript創(chuàng)建窗體的方法
相關(guān)文章
深入淺析同源與跨域,jsonp(函數(shù)封裝),CORS原理
這篇文章主要介紹了同源與跨域,jsonp(函數(shù)封裝),CORS原理,從同源政策中Ajax限制,到跨域問(wèn)題以及跨域問(wèn)題的解決方法幫大家更加深入的去了解其中原理2021-08-08
javascript 循環(huán)讀取JSON數(shù)據(jù)的代碼
服務(wù)端向客戶端返回了一串JSON格式的數(shù)據(jù)。在有些時(shí)候,因?yàn)槟承┨厥獾脑蛭覀儾恢涝嫉膋ey值,因此我們此時(shí)無(wú)法象正常一樣通過(guò)key值,來(lái)獲取value值。這時(shí)我們必須循環(huán)讀取JSON對(duì)象數(shù)據(jù)。廢話少說(shuō),來(lái)看例子。2010-07-07
js+json用表格實(shí)現(xiàn)簡(jiǎn)單網(wǎng)站左側(cè)導(dǎo)航
閑暇之余,制作一用表格實(shí)現(xiàn)的簡(jiǎn)單的網(wǎng)站導(dǎo)航條,分享給大家。這里的數(shù)據(jù)基于json格式,學(xué)習(xí)json的朋友可以參考下。2010-04-04
json的前臺(tái)操作和后臺(tái)操作實(shí)現(xiàn)代碼
通常情況下,json的在項(xiàng)目中的應(yīng)用都是在后臺(tái)把數(shù)據(jù)傳到前臺(tái),然后前臺(tái)再獲取json中的數(shù)據(jù).2012-01-01
實(shí)現(xiàn)單層json按照key字母順序排序的示例
下面小編就為大家分享一篇實(shí)現(xiàn)單層json按照key字母順序排序的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
JQuery用$.ajax或$.getJSON跨域獲取JSON數(shù)據(jù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了JQuery用$.ajax或$.getJSON跨域獲取JSON數(shù)據(jù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-09-09

