JSON进阶四-前后台交互之美

news/2024/7/9 22:45:46

例如:以前我们做注册界面,我们需要写很多东西,在前端,我们要使用各种文本输入框,有些还要使用select,checkbox等,提供用户填写各种信息,无论在JSP中还是在APS.NET中,我们都要把前台文本框和后台赋值做一一对应。几个还好,十几个也能应付,几十个就感觉无聊了,我最不喜欢的就是做这类的东西。一旦要添加一个东西,就要修改HTML和后台代码,用表单提交的方式还好,用AJAX方式就麻烦了,不但要修改后台代码,还要修改JS,耦合度非常高,下面的例子就是小弟最近的一些编程心得,使用JSON来解决这个问题。

在此我用到了包括Jquery-1.2.6在内的四个js文件:(如果你对JQ不是很了解的话,可以看些园子里其他园友写的文章)

分别介绍下其他三个:

Json2.js 是一个老外写的把Json和字符串互相转换的JS(好像是EXT里的东西,不过我是在一个老外BLOG里找到的)。我对其做了一些扩展,这个以后再说吧。

Json2.parse(); // 把Json形式的字符串转换成Json对象(包括JSON数组形式)。

Json2.stringify(); //把Json对象转换成Json形式的字符串(包括JSON数组形式)。

Validator.js 是一个数据验证的js文件,我在日常工作中很多地方用到它,是我自己写的一个简单的验证,有兴趣的同学可以对他扩展。我在里面提供了,日期,数组,中文等验证方式。

TableSerializer.js 这个JS是的把表格里的元素转换成JSON,也能把JSON转换到表格中,这个JS还不够完善,有兴趣的同学可以扩展一下,或者把你的需求告诉我,我不断的完善它。

TableSerializer.TableToJson(); // 把表格里的填写项转换成Json数组

TableSerializer.JsonToTable(); // 把json数组转换成表格中的元素。

下例: (有兴趣的话你可以填写点信息操作下)

PSTS
全部中国美国日本
PSTS
全部中国美国日本
转换
PSTS
全部中国美国日本
PSTS
全部中国美国日本


对应TableSerializer,必须符合的HTML结构:

< table  id ="tab" >
< tr >
< td  type ="text" >
< div  type ="text" >
< input  type ="text"  msg ="*"  key ="Guid"  dataType ="ints" />                                 
</ div >     
</ td >
< td  type ="checkbox" >
< div  type ="checkbox" >
PSTS 
< input  type ="checkbox"  key ="PSTS"   dataType ="int" />                    
</ div >  
</ td >
< td >
< div  type ="select" >
< select  msg ="*"  key ="GJ"  dataType ="string" >
< option  value ="" > 全部 </ option >
< option  value ="中国" > 中国 </ option >
< option  value ="美国" > 美国 </ option >
< option  value ="日本" > 日本 </ option >
</ select >
</ div >  
</ td >
< td >
< div  type ="text" >
< input  type ="text"  msg ="*"   key ="dt"  dataType ="date" />                                                    
</ div >
</ td >
</ tr >
</ table >

 

可以看到,我在每个获得值的操作项外都嵌套类一个DIV,这类DIV都会有一个特殊属性type,这个type表示操作项HTML的类型。

在操作项中,会有一个key的属性,这个属性的值就表示Json的主键值,而dataType表示数据类型,msg表示如果数据输入类型没通过验证时所提示的错误信息。

Js代码:

< script >
var  tab;
$(document).ready(
  
function () {
    
// 构造一个新的TableSerializer的JSON对象,并对指定需要转换成JSON数组形式,ID为’tab'的表格
    tab  =  $.extend({}, TableSerializer, { IDs:  ' #tab '  });
  }
);
function  a(){
  
//  获得ID为tab的表格中,指定格式内容的,JSON数组形式的字符串。
   var  str  =  tab.TableToJson();
  
//  判断是否通过数据类型验证。
   if  (tab.IsAllow){
    
//  把JSON一一对应赋予id为fa的表格中HTML项里。
    TableSerializer.JsonToTab( " #fa " , JSON2.parse(str));
  }
}
< / script>

到此为止,我们还是没有看到JSON和后台的交互。

其实很简单,我们只要把TableToJson()方法中获得的JSON数组形式的字符串发送的后台,就可以了。

这里我用到了C#的一个开源项目Newtonsoft.Json:

后台写法如下:

namespace  WebApplication1
{
    
public   partial   class  _Default : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
           
//  在这里我使用的是AJAX形式,后台获得一串前台传递的JSON数组形式的字符串
            if  ( ! string .IsNullOrEmpty(Request[ " key " ])) {
                
//  反序列化
                List < ss >  sss  =  (List < ss > )JavaScriptConvert.DeserializeObject(Request[ " key " ],  typeof (List < ss > ));
                
//  在序列化发送到前台。
                Response.Write(sss.ToJSON());
                Response.End();
            } 
        }
    }
    
//  对应前台输入内容的实体。
     public   class  ss {
        
public   int  Guid;
        
public   bool  PSTS  =   true ;
        
public   string  GJ  =   string .Empty;
        
public  DateTime dt;
    }
    
//  把实体系列化成JSON形式字符串
     public   static   class  JsonHelper
    {
        
public   static   string  ToJSON( this   object  obj)
        {
            StringWriter sw 
=   new  StringWriter(System.Globalization.CultureInfo.InvariantCulture);
            Newtonsoft.Json.JsonSerializer json 
=   new  Newtonsoft.Json.JsonSerializer();
            json.NullValueHandling 
=  Newtonsoft.Json.NullValueHandling.Ignore;
            json.ReferenceLoopHandling 
=  Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            
using  (Newtonsoft.Json.JsonWriter jw  =   new  Newtonsoft.Json.JsonTextWriter(sw))
            {
                json.Serialize(jw, obj);
            }
            
return  sw.ToString();
        }
    }
}

 

 不难看出,无论需求如何改变,我们只需要改变后台的实体,以及前台HTML,而无需对前台的JS和后台代码做任何改动。

 示例代码

转载于:https://www.cnblogs.com/KangC/archive/2008/12/08/1349431.html


http://www.niftyadmin.cn/n/674674.html

相关文章

GPIO工作原理(stm32F10x)

GPIO -- General Purpose Input Output &#xff08;通用输入/输出&#xff09;简称为GPIO&#xff0c; GPIO在每一款单片机中的地位都是至关重要的。 下面说一下它的工作原理。 我用的是MINISTM32F103RCT6这款单片机。 1.1 GPIO工作方式 工作方式&#xff1a;&#xff08;4输入…

初步试用mini6410

最近买了mini6410&#xff0c;试玩了一下&#xff0c;发现不错&#xff0c;支持4种系统QT,WINCE,AD&#xff0c;XUbuntu 初步测试了一下这4种系统&#xff0c;其中QT除了包括了基本的&#xff0c;还加多了一些外围的测试程序&#xff0c;不过有一些还没有完善例如ADC 其余的三种…

题材预期明朗商业股显露机会

虽然近期大盘出现了震荡走势&#xff0c;但盘口显示&#xff0c;商业股出现了较为明显的上升趋势&#xff0c;尤其是昨日的西单商场、王府井等个股均有不俗的走势&#xff0c;如此看来&#xff0c;商业股具有极强的投资机会。两大动力助力商业股对于商业股在近期的如此强劲走势…

Native Client 谷歌的另一个大手笔?

相信大家对Chrome的发布印象深刻。网民们焦急的等待&#xff0c;各大网站争相报道。下载日疯狂的下载&#xff0c;各大博客铺天盖地的报道。而这次Native Client的出现犹如夜盗&#xff0c;在我们不知不觉中悄悄降临。 我是在Google Code Blog的订阅里面看到这条消息的。 Nativ…

常用存储过程语法

现在学一下常用的存储过程的语法&#xff0c;只要花一点点时间学习下&#xff0c;就能用存储过程实现很复杂的功能&#xff0c;可以少写很多代码。 一.注释 -- 单行注释&#xff0c;从这到本行结束为注释,类似C,c#中///* … */ 多行注释&#xff0c;类似C&#xff0c;C#中/* ……

使用JMeter进行性能测试

JMeter是Apache组织的开放源代码项目&#xff0c;它是功能和性能测试的工具&#xff0c;100%的用java实现&#xff0c;最新的版本是1.9.1&#xff0c;大家可以到http://jakarta.apache.org/jmeter/index.html下载源代码和查看相关文档。1 JMeter作用领域JMeter可以用于测试静态…

PID控制电机转速

转一个PID控制电机的小程序&#xff0c; 被PID困扰好多天了&#xff0c; 知道它的原理但是一直不明白如何将它运用到电机调速中间去&#xff0c; 看了这个程序之后感觉茅塞顿开。原来也并不难^-^ 转载地址&#xff1a;呃&#xff0c;刚刚不小心把网页关掉了(大写的尴尬)。。。…

COM原理及应用之概述

1、组件设计的原始目的 跨平台、跨网络、积木式搭建程序 2、组件的两个规范&#xff1a;CORBA 和COM OMC&#xff08;Object Management Group&#xff0c;对象管理组织&#xff09;的CORBA&#xff08;Common Object Request Breaker Arehitecture &#xff0c;公共对象请求…