父子窗体间传递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中处理带有命名空间的XML数据
Jun 13 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
Jun 11 Javascript
JQuery基础语法小结
Feb 27 Javascript
实现音乐播放器的代码(html5+css3+jquery)
Aug 04 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
Nov 30 Javascript
Bootstrap 布局组件(全)
Jul 18 Javascript
修改jquery中dialog的title属性方法(推荐)
Aug 26 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
JS面向对象的程序设计相关知识小结
May 26 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
Vue实现导航栏的显示开关控制
Nov 01 Javascript
uni-app微信小程序登录授权的实现
May 22 Javascript
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
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP求最大子序列和的算法实现
2011/06/24 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
学习ExtJS Column布局
2009/10/08 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
用python实现刷点击率的示例代码
2019/02/21 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
pandas取出重复数据的方法
2019/07/04 Python
python正则-re的用法详解
2019/07/28 Python
Python关于反射的实例代码分享
2020/02/20 Python
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
财务管理专业求职信
2014/06/11 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
元宵节寄语大全
2015/02/27 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书