父子窗體間傳遞JSON格式的數(shù)據(jù)的代碼
更新時間:2010年12月25日 22:32:16 作者:
在開發(fā)的項目中,遇到這樣一個例子:當用戶選擇某一個用戶名時,彈出當前用戶的評分卷,該評分卷列出了所有一級評分項,讓用戶進行評分操作。
如果某個一級評分項包含評分子項,則點擊該評分項時,再彈出一個新窗口,新窗體中列出了當前評分項的所有評分子項列表,供用戶進行操作。用戶操作完成后,點擊“確定”按鈕,則返回到父窗體,在子窗體中所有的操作結(jié)果,同時要帶到父窗體中。同時,如果用戶再次點擊該評分項,則在彈出子窗體的同時,要將上次操作的結(jié)果綁定到對應的操作項上。
上面描述的例子,就涉及到了一個父子窗體間的數(shù)據(jù)傳遞。如何實現(xiàn)這一數(shù)據(jù)傳遞,當然有很多方法。這里只是記錄一下在這個例子中我使用的方法。我的方法是在子窗體點擊“確定”按鈕時,將操作結(jié)果構(gòu)造成json格式的字符串,通過調(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"}
]}
此處子項打分需要保持的分別是bh:編號;lx:類型;df:得分;bz:備注。
按照自己的需要,可以再自己增加需要保持的項。構(gòu)造此json數(shù)據(jù)可以放在前臺,也可以放在后臺。
在此例中,我是放置后臺的。代碼如下:
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 += "卐"; //此處用此特殊的符號來分隔sql語句
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>");
}
"@"符號可以防止在jsonBuilder.ToString()后,轉(zhuǎn)義字符“\”的消失。
調(diào)用父窗體的GetZXDF()方法,將json數(shù)據(jù)傳遞給父窗體。
下面給出子窗體加載時,綁定json數(shù)據(jù)的代碼
$(function() {
//加載時獲取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"){
//選項打分類的綁定
$("#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()方法是父窗體上用來向子窗體傳遞json數(shù)據(jù)的方法,代碼如下:
//通過編號獲取對應評分項的子項打分結(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();
}
上面描述的例子,就涉及到了一個父子窗體間的數(shù)據(jù)傳遞。如何實現(xiàn)這一數(shù)據(jù)傳遞,當然有很多方法。這里只是記錄一下在這個例子中我使用的方法。我的方法是在子窗體點擊“確定”按鈕時,將操作結(jié)果構(gòu)造成json格式的字符串,通過調(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"}
]}
此處子項打分需要保持的分別是bh:編號;lx:類型;df:得分;bz:備注。
按照自己的需要,可以再自己增加需要保持的項。構(gòu)造此json數(shù)據(jù)可以放在前臺,也可以放在后臺。
在此例中,我是放置后臺的。代碼如下:
復制代碼 代碼如下:
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 += "卐"; //此處用此特殊的符號來分隔sql語句
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>");
}
"@"符號可以防止在jsonBuilder.ToString()后,轉(zhuǎn)義字符“\”的消失。
調(diào)用父窗體的GetZXDF()方法,將json數(shù)據(jù)傳遞給父窗體。
下面給出子窗體加載時,綁定json數(shù)據(jù)的代碼
復制代碼 代碼如下:
$(function() {
//加載時獲取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"){
//選項打分類的綁定
$("#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()方法是父窗體上用來向子窗體傳遞json數(shù)據(jù)的方法,代碼如下:
復制代碼 代碼如下:
//通過編號獲取對應評分項的子項打分結(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();
}
您可能感興趣的文章:
相關文章
js操作兩個json數(shù)組合并、去重,以及刪除某一項元素
這篇文章主要介紹了js操作兩個json數(shù)組合并、去重,以及刪除某一項元素,需要的朋友可以參考下2020-09-09javascript 循環(huán)讀取JSON數(shù)據(jù)的代碼
服務端向客戶端返回了一串JSON格式的數(shù)據(jù)。在有些時候,因為某些特殊的原因我們不知道原始的key值,因此我們此時無法象正常一樣通過key值,來獲取value值。這時我們必須循環(huán)讀取JSON對象數(shù)據(jù)。廢話少說,來看例子。2010-07-07