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 相关文章推荐
JavaScript 调试器简介
Feb 21 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
Dec 26 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
Nov 29 Javascript
js简单实现竖向tab选项卡的方法
May 04 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
Sep 27 Javascript
js在ie下打开对话窗口的方法小结
Oct 24 Javascript
JavaScript实现两个select下拉框选项左移右移
Mar 09 Javascript
react开发中如何使用require.ensure加载es6风格的组件
May 09 Javascript
Vue.js进行查询操作的实例详解
Aug 25 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
jQuery Dom元素操作技巧
Feb 04 jQuery
layui表格设计以及数据初始化详解
Oct 26 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
php下目前为目最全的CURL中文说明
2010/08/01 PHP
JS date对象的减法处理实现代码
2010/12/28 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python实现调度算法代码详解
2017/12/01 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
Python中的枚举类型示例介绍
2019/01/09 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
跟单文员的岗位职责
2013/11/14 职场文书
医学检验专业大学生求职信
2013/11/18 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
英文推荐信格式范文
2014/05/09 职场文书
2014年会策划方案
2014/05/11 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
员工安全生产责任书
2014/07/22 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
营销与策划实训报告
2014/11/05 职场文书
2014年药店工作总结
2014/11/20 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书