json实现前后台的相互传值详解


Posted in Javascript onJanuary 05, 2015

前后台的相互传值如果值太多,写的麻烦累人,且容易出错。这里整理出一套使用标记 标签属性的办法来传值, 后台取值和前台的绑定都有了大大的简化。

一、把json对象转成字符串

$.extend({

         //将json对象转换成字符串   [貌似jquery没有自带的这种方法]

         toJSONString: function (object) {

             if (object == null)

                 return;

             var type = typeof object;

             if ('object' == type) {

                 if (Array == object.constructor) type = 'array';

                 else if (RegExp == object.constructor) type = 'regexp';

                 else type = 'object';

             }

             switch (type) {

                 case 'undefined':

                 case 'unknown':

                     return;

                     break;

                 case 'function':

                 case 'boolean':

                 case 'regexp':

                     return object.toString();

                     break;

                 case 'number':

                     return isFinite(object) ? object.toString() : 'null';

                     break;

                 case 'string':

                     return '"' + object.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g, function () {

                         var a = arguments[0];

                         return (a == '\n') ? '\\n' : (a == '\r') ? '\\r' : (a == '\t') ? '\\t' : ""

                     }) + '"';

                     break;

                 case 'object':

                     if (object === null) return 'null';

                     var results = [];

                     for (var property in object) {

                         var value = $.toJSONString(object[property]);

                         if (value !== undefined) results.push($.toJSONString(property) + ':' + value);

                     }

                     return '{' + results.join(',') + '}';

                     break;

                 case 'array':

                     var results = [];

                     for (var i = 0; i < object.length; i++) {

                         var value = $.toJSONString(object[i]);

                         if (value !== undefined) results.push(value);

                     }

                     return '[' + results.join(',') + ']';

                     break;

             }

         }

     });

二、创建数据容器对象 [用来绑定要传给后台的前台控件值]

 var DataClass = {

     create: function () {

                 return function () {

                     this.MyInit.apply(this, arguments);//创建对象的构造函数  //arguments 参数集合  系统名称 不能写错

                 }

             }

 }

 var MyDataPack = DataClass.create();

 MyDataPack.prototype = {

     //初始化

     MyInit: function (url, operation, params) {

                 this.data = new Object();   //所有数据容量

                 var bdata = new Object();

                 bdata.url = url;            //地址

                 bdata.operation = operation;//操作

                 bdata.params = params;      //参数

                 this.data.BasicData = bdata; //基本数据

             },

     //添加数据 如:addValue("obj", "111");

     addValue: function (p, obj) {

         this.data[p] = obj;

     },

     //取得 所有标记控件的值 并写入数据

     getValueSetData: function (togName) {

                 var values = Object(); //值的集合

                 $("[subtag='" + togName + "']").each(function () {

                     //如果是input 类型 控件

                     if (this.localName == "input") {

                         //如果是text 控件

                         if (this.type == "text" || this.type == "hidden") {

                             values[this.id] = this.value;

                         }

                         else if (this.type == "...") {

                         }

                         //......

                     }

                     else if (this.localName == "...") {

                     }

                     //................

                 });

                 this.data[togName] = values;//添加到数据集合

             },

     //取值 如:getValue("BasicData")

     getValue: function (p) {

                 return this.data[p];

             },

     //获取或设置url

     getUrl: function (url) {

                 if (url)

                     this.data.BasicData["url"] = url;

                 else

                     return this.data.BasicData["url"];

             }

     ,

     //取值 转成字符串的对象 数据

     getJsonData: function () {

         return $.toJSONString(this.data);

     }

 }

三、创建绑定前台数据对象 [用来读取后台传过来的值,并绑定到前台页面]

var MyDataBinder = {

    //绑定数据到 控件 data:数据 tag:标签

    Bind: function (data, Tag) {

        var MJson = $.parseJSON(data);

        //只绑定 标记 了的 标签

        $("[bindtag='" + Tag + "']").each(function () {

            if (this.localName == "input") {

                if (MJson[this.id]) //如果后台传了值

                    $(this).attr("value", MJson[this.id]);

            }

            else if (this.localName == "...") {

            }

            //....

        });

    }

};

四、使用示例

前台html:

 <table>

     <tr>

         <th>一</th>

         <th>二</th>

         <th>三</th>

     </tr>

     <tr>

         <td id="td1"><input type="text" id="inp_1" subtag="subtag" bindtag="bind" /></td>

         <td id="td2"><input type="text" id="inp_2" subtag="subtag" value="我只是测试一下下" /></td>

         <td><input type="text" id="inp_3" subtag="subtag" bindtag="bind" /></td>

     </tr>       

 </table>

前台js:

 //====================使用示例======================================

 var MyDataPack = new MyDataPack("Handler1.ashx", "CESHI", "");

 MyDataPack.getValueSetData("subtag");//将控件数据写入对象   “subtag”为要取 控件 值 的标签

 //-------------------传前台值到后台---------------

 $.post(MyDataPack.getUrl(), MyDataPack.getJsonData(), function (data) {

     //-------------------绑定后台值到前台-----------------

     MyDataBinder.Bind(data, "bind");  //"bind" 为 要绑定控件的 标签

 });

后台:

public void ProcessRequest(HttpContext context)

{

    context.Response.ContentType = "text/plain";

    //====================取前台值=============================================

    //因为后台传过来的是 json对象 转换后的字符串  所以 所有数据都 做为一个参数传过来了

    var values = context.Request.Form[0];

    //需要引入程序集System.Web.Extensions.dll

    JavaScriptSerializer _jsSerializer = new JavaScriptSerializer();

    //将 json 对象字符串  转成 Dictionary 对象

    Dictionary<string, Dictionary<string, string>> dic = _jsSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(values);

    //现在 dic 里面就包含了 所有前台传过来的值 想怎么用 就怎么用了。

    string inp_2 = dic["subtag"]["inp_2"];//这样就直接取到了前台 页面 id为 inp_2 的 控件value 值

    //=====================传值到前台============================================

    Dictionary<string, string> dic2 = new Dictionary<string, string>();

    dic2.Add("inp_1", "修改1");//这里只用对应控件id 传值即可

    dic2.Add("inp_2", "修改2");

    dic2.Add("inp_3", "修改3");

    context.Response.Write(_jsSerializer.Serialize(dic2));

}

小伙伴们对使用json实现前后台传值是否了解清楚了呢,有问题的话,就给我留言吧

Javascript 相关文章推荐
给moz-firefox下添加IE方法和属性
Apr 10 Javascript
javascript移出节点removeChild()使用介绍
Apr 03 Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 Javascript
使用node+vue.js实现SPA应用
Jan 28 Javascript
jQuery中$.ajax()方法参数解析
Oct 22 Javascript
关于Iframe父页面与子页面之间的相互调用
Nov 22 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 Javascript
详解用js代码触发dom事件的实现方案
Jun 10 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 Javascript
Ajax请求超时与网络异常处理图文详解
May 23 Javascript
jQuery中eq()方法用法实例
Jan 05 #Javascript
一款基于jQuery的图片场景标注提示弹窗特效
Jan 05 #Javascript
jQuery中toggleClass()方法用法实例
Jan 05 #Javascript
jQuery中removeClass()方法用法实例
Jan 05 #Javascript
jQuery中addClass()方法用法实例
Jan 05 #Javascript
js Calender控件使用详解
Jan 05 #Javascript
js的回调函数详解
Jan 05 #Javascript
You might like
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
php 三维饼图的实现代码
2008/09/28 PHP
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
PHP对象实例化单例方法
2017/01/19 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
asm.js使用示例代码
2013/11/28 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
angular2模块和共享模块详解
2018/04/08 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
python实现ip查询示例
2014/03/26 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
python 如何设置守护进程
2020/10/29 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
应届生会计求职信
2013/11/11 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
师范生求职自荐信
2014/06/14 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript
python如何为list实现find方法
2022/05/30 Python