父子窗體間傳遞JSON格式的數(shù)據(jù)的代碼
更新時間:2010年12月25日 22:32:16 作者:
在開發(fā)的項(xiàng)目中,遇到這樣一個例子:當(dāng)用戶選擇某一個用戶名時,彈出當(dāng)前用戶的評分卷,該評分卷列出了所有一級評分項(xiàng),讓用戶進(jìn)行評分操作。
如果某個一級評分項(xiàng)包含評分子項(xiàng),則點(diǎn)擊該評分項(xiàng)時,再彈出一個新窗口,新窗體中列出了當(dāng)前評分項(xiàng)的所有評分子項(xiàng)列表,供用戶進(jìn)行操作。用戶操作完成后,點(diǎn)擊“確定”按鈕,則返回到父窗體,在子窗體中所有的操作結(jié)果,同時要帶到父窗體中。同時,如果用戶再次點(diǎn)擊該評分項(xiàng),則在彈出子窗體的同時,要將上次操作的結(jié)果綁定到對應(yīng)的操作項(xiàng)上。
上面描述的例子,就涉及到了一個父子窗體間的數(shù)據(jù)傳遞。如何實(shí)現(xiàn)這一數(shù)據(jù)傳遞,當(dāng)然有很多方法。這里只是記錄一下在這個例子中我使用的方法。我的方法是在子窗體點(diǎn)擊“確定”按鈕時,將操作結(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"}
]}
此處子項(xiàng)打分需要保持的分別是bh:編號;lx:類型;df:得分;bz:備注。
按照自己的需要,可以再自己增加需要保持的項(xiàng)。構(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"){
//選項(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()方法是父窗體上用來向子窗體傳遞json數(shù)據(jù)的方法,代碼如下:
//通過編號獲取對應(yī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();
}
上面描述的例子,就涉及到了一個父子窗體間的數(shù)據(jù)傳遞。如何實(shí)現(xiàn)這一數(shù)據(jù)傳遞,當(dāng)然有很多方法。這里只是記錄一下在這個例子中我使用的方法。我的方法是在子窗體點(diǎn)擊“確定”按鈕時,將操作結(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"}
]}
此處子項(xiàng)打分需要保持的分別是bh:編號;lx:類型;df:得分;bz:備注。
按照自己的需要,可以再自己增加需要保持的項(xiàng)。構(gòu)造此json數(shù)據(jù)可以放在前臺,也可以放在后臺。
在此例中,我是放置后臺的。代碼如下:
復(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 += "卐"; //此處用此特殊的符號來分隔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ù)的代碼
復(fù)制代碼 代碼如下:
$(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"){
//選項(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()方法是父窗體上用來向子窗體傳遞json數(shù)據(jù)的方法,代碼如下:
復(fù)制代碼 代碼如下:
//通過編號獲取對應(yī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模擬彈出窗口_窗體滾動跟隨
- Javascript 兩個窗體之間傳值實(shí)現(xiàn)代碼
- Javascript showModalDialog兩個窗體之間傳值
- javascript 通過封裝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)拖拽移動子窗體的JS實(shí)現(xiàn)
- Ext JS動態(tài)加載JavaScript創(chuàng)建窗體的方法
相關(guān)文章
js操作兩個json數(shù)組合并、去重,以及刪除某一項(xiàng)元素
這篇文章主要介紹了js操作兩個json數(shù)組合并、去重,以及刪除某一項(xiàng)元素,需要的朋友可以參考下2020-09-09寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON
這篇文章主要為大家介紹了寫給小白學(xué)習(xí)的地理信息的表示法GeoJSON的詳細(xì)實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05javascript 循環(huán)讀取JSON數(shù)據(jù)的代碼
服務(wù)端向客戶端返回了一串JSON格式的數(shù)據(jù)。在有些時候,因?yàn)槟承┨厥獾脑蛭覀儾恢涝嫉膋ey值,因此我們此時無法象正常一樣通過key值,來獲取value值。這時我們必須循環(huán)讀取JSON對象數(shù)據(jù)。廢話少說,來看例子。2010-07-07javascript操作JSON的要領(lǐng)總結(jié)
JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數(shù)據(jù)不須要任何特殊的 API 或工具包,需要的朋友可以了解下2012-12-12