父子窗体间传递JSON格式的数据的代码

 更新时间:2010年12月25日 22:32:16   作者:  
在开发的项目中,遇到这样一个例子:当用户选择某一个用户名时,弹出当前用户的评分卷,该评分卷列出了所有一级评分项,让用户进行评分操作。
如果某个一级评分项包含评分子项,则点击该评分项时,再弹出一个新窗口,新窗体中列出了当前评分项的所有评分子项列表,供用户进行操作。用户操作完成后,点击“确定”按钮,则返回到父窗体,在子窗体中所有的操作结果,同时要带到父窗体中。同时,如果用户再次点击该评分项,则在弹出子窗体的同时,要将上次操作的结果绑定到对应的操作项上。

  上面描述的例子,就涉及到了一个父子窗体间的数据传递。如何实现这一数据传递,当然有很多方法。这里只是记录一下在这个例子中我使用的方法。我的方法是在子窗体点击“确定”按钮时,将操作结果构造成json格式的字符串,通过调用父窗体上的方法:opener.方法(),将json格式数据传递到父窗体上。

  此例中构造的json数据类似如下格式:

  {"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:备注。

  按照自己的需要,可以再自己增加需要保持的项。构造此json数据可以放在前台,也可以放在后台。

  在此例中,我是放置后台的。代码如下:

复制代码 代码如下:

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()后,转义字符“\”的消失。

  调用父窗体的GetZXDF()方法,将json数据传递给父窗体。

  下面给出子窗体加载时,绑定json数据的代码

复制代码 代码如下:

$(function() {

//加载时获取json,然后绑定打分结果
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数据的方法,代码如下:
复制代码 代码如下:

  //通过编号获取对应评分项的子项打分结果的json字符串
function GetJson(p_bh)
{

   //$("#zxdf" + p_bh).siblings("input").eq(1).val()中保存的就是子窗体传递给父窗体的json数据
return $("#zxdf" + p_bh).siblings("input").eq(1).val();
}

相关文章

  • 深入浅析同源与跨域,jsonp(函数封装),CORS原理

    深入浅析同源与跨域,jsonp(函数封装),CORS原理

    这篇文章主要介绍了同源与跨域,jsonp(函数封装),CORS原理,从同源政策中Ajax限制,到跨域问题以及跨域问题的解决方法帮大家更加深入的去了解其中原理
    2021-08-08
  • javascript 循环读取JSON数据的代码

    javascript 循环读取JSON数据的代码

    服务端向客户端返回了一串JSON格式的数据。在有些时候,因为某些特殊的原因我们不知道原始的key值,因此我们此时无法象正常一样通过key值,来获取value值。这时我们必须循环读取JSON对象数据。废话少说,来看例子。
    2010-07-07
  • js+json用表格实现简单网站左侧导航

    js+json用表格实现简单网站左侧导航

    闲暇之余,制作一用表格实现的简单的网站导航条,分享给大家。这里的数据基于json格式,学习json的朋友可以参考下。
    2010-04-04
  • json编写简单一例

    json编写简单一例

    主要是了解一下json的简单写法与应用,方便想学习json的朋友
    2008-08-08
  • json的前台操作和后台操作实现代码

    json的前台操作和后台操作实现代码

    通常情况下,json的在项目中的应用都是在后台把数据传到前台,然后前台再获取json中的数据.
    2012-01-01
  • JSON 必知必会 观后记

    JSON 必知必会 观后记

    这篇文章主要介绍了个人看了JSON 必知必会一书的读后感,此书从各个方面介绍了json的一些注意事项与优缺点。
    2016-10-10
  • JSON 数据格式详解

    JSON 数据格式详解

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成
    2017-09-09
  • 实现单层json按照key字母顺序排序的示例

    实现单层json按照key字母顺序排序的示例

    下面小编就为大家分享一篇实现单层json按照key字母顺序排序的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • JSON扫盲帖 JSON.as类教程

    JSON扫盲帖 JSON.as类教程

    如果json字符串是从html用FlashVars来传递参数时那么字符串中的第一个双引号(包括双引号)以后的内容就不会得到传送.
    2009-02-02
  • JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码

    JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码

    这篇文章主要介绍了JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码,需要的朋友可以参考下
    2017-09-09

最新评论