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


Posted in Javascript onDecember 25, 2010

如果某个一级评分项包含评分子项,则点击该评分项时,再弹出一个新窗口,新窗体中列出了当前评分项的所有评分子项列表,供用户进行操作。用户操作完成后,点击“确定”按钮,则返回到父窗体,在子窗体中所有的操作结果,同时要带到父窗体中。同时,如果用户再次点击该评分项,则在弹出子窗体的同时,要将上次操作的结果绑定到对应的操作项上。

上面描述的例子,就涉及到了一个父子窗体间的数据传递。如何实现这一数据传递,当然有很多方法。这里只是记录一下在这个例子中我使用的方法。我的方法是在子窗体点击“确定”按钮时,将操作结果构造成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 += "?e"; //此处用此特殊的符号来分隔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(); 
}
Javascript 相关文章推荐
jquery常用方法及使用示例汇总
Nov 08 Javascript
JS修改iframe页面背景颜色的方法
Apr 01 Javascript
jquery实现全屏滚动
Dec 28 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
Oct 24 Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
Jan 11 Javascript
AngularJS自定义指令详解(有分页插件代码)
Jun 12 Javascript
webpack实现热加载自动刷新的方法
Jul 30 Javascript
node.js操作MongoDB的实例详解
Oct 11 Javascript
Angular 4中如何显示内容的CSS样式示例代码
Nov 06 Javascript
vue项目中的webpack-dev-sever配置方法
Dec 14 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
javascript自执行函数之伪命名空间封装法
Dec 25 #Javascript
Ext对基本类型的扩展 ext,extjs,format
Dec 25 #Javascript
JQuery live函数
Dec 24 #Javascript
jquery 单击li防止重复加载的实现代码
Dec 24 #Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 #Javascript
在JavaScript中获取请求的URL参数
Dec 22 #Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 #Javascript
You might like
239军机修复记
2021/03/02 无线电
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
php解决约瑟夫环示例
2014/04/09 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
PHP数组操作类实例
2015/07/11 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
python实现日常记账本小程序
2018/03/10 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
Python解析多帧dicom数据详解
2020/01/13 Python
小结Python的反射机制
2020/09/28 Python
文案策划专业自荐信
2014/07/07 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python