转自:http://www.okajax.com/a/200911/json.html
<!-- /内容上广告-->
<!-- 此处可放幻灯广告/-->
越来越多的js供我们来选择,在使用过程中插件会提供一个数据给我们进行填充.现在大部分的数据格式都是为json.这个格式就需要后端开发人员提供给前端了.web的软件无非就是后端给前端数据,然后前端再转数据类型.然而这个转换该如何来做?
矛盾的产生:
1.前端的一个插件,下面以一个简单的jQuery插件为例子,这个方法可以帮助你为一个select标签添加项
?? 1. $.fn.setSelect =? function (data){?
?? 2.????????? var? self =? this ;?
?? 3.???????? self.empty();?
?? 4.???????? $.each(data,? function (i){?
?? 5.????????????? var? oOption = document.createElement( "option" );?
?? 6.???????????? oOption.innerText =? this .text;?
?? 7.???????????? oOption.value =? this .value;?
?? 8.???????????? oOption.selected =? this .selected;?
?? 9.???????????? self[0].appendChild(oOption);?
? 10.???????? });?
? 11.???? }?
作为这个插件的开发者,感觉这个方法很完美.它要求json的传进来的格式是这样的.
?? 1. var? data = [???
?? 2.??????? {text: '' ,value: '' },???
?? 3.???????? {text: '' ,value: '' },???
?? 4.???????? {text: '' ,value: '' },???
?? 5.???????? {text: '' ,value: '' ,selected: true }]??
然后我告诉后端开发人员 ,"你只要给我上面的格式就可以了".
这个时候插件的开发者并没有意识到这个世界上的数据接口并不是他说了算的,后端有着其自己的业务逻辑.
现在假设我要显示一个后端为Employee的列表
?? 1. public?? class? Employee?
?? 2.? {?
?? 3.?????? public? string Name { get; set; }?
?? 4.?
?? 5.?????? public? Guid Id { get; set; }?
?? 6.?
?? 7.?????? public? bool isOnline { get; set; }?
?? 8.? }?
作为后端人员,最简单的做法如下
?? 1. List < Employee >?? list? =? GetEmployeeList ();?
?? 2. return list.ToJSON();
问题是Employee的属性不符合前端插件的要求.还好c# 3.0有匿名对象.还可以解决这个问题.现在更改后如下
?? 1. List < Employee >?? list? =? GetEmployeeList ();?
?? 2.?
?? 3.?? var? jsonList? =? from? employee in list?
?? 4.????????????????? select new {? text? =? employee .Name,? value? =? employee .Id,? selected? =? employee .isOnline };?
?? 5.? return jsonList.ToJSON();?
后来后端人员发现,这样的情况实在太多了,好好的一个Employee对象,里面的属性全变成text,value,selected了...
这里便出现了矛盾,前端的接口也可以根据后端来定的。即数据也可以这样的
??? var? data =[{Name:'',Id:'',isOnline:""}];?
前端的开发者妥协了,无奈还是接收上面的数据.然后做了一个循环,把数据转成符合插件接口的数据.
??? var? transdateData =[];?
???? $.each(data,function() {?
???????? var? newData ={};?
????????? newData.text = data .Name;?
????????? newData.value = data .Id;?
????????? newData.selected = data .isOnline;?
???????? transdateData.push(newData);?
???? });?
这样的做法并不好,为了用插件在循环,数据量大了就见的出来了.当然我们的目标还是需要转换数据的,这个转换确实应该前端来做,但我们要换个方法.
二.事件回调,格式化数据
改进插件的使用方法,在添加dom之前,格式化数据.现在插件代码如下,添加了一个formatEvent方法
??? $ .fn.setSelect? =? function (data,formatEvent){?
????????? var? self? =? this ;?
????????? self.empty();?
????????? $.each(data, function(i){?
????????????? if(formatEvent) formatEvent(this);?
???????????????? var? oOption? =? document .createElement("option");?
?????????????? oOption.innerText? =? this .text;?
?????????????? oOption.value? =? this .value;?
?????????????? oOption.selected? =? this .selected;?
???????????? self[0].appendChild(oOption);?
???????? });?
插件使用方法
??? var? data? = [???
?????? {name:'xx',id:'xx'},???
?????? {name:'xx',id:'xx'}];?
????????? $("#xx").setSelect(data,function(e) {?
?????????????? e e.text =e.name;?
?????????????? e e.value =e.id;?
????????? });?
ok,这样问题就解决了,这种方式在很多地方都可以使用.小小技巧,分享一下.
详细解决方案
json格式化,一致格式,前端与后端的矛盾
热度:95 发布时间:2012-10-28 09:54:44.0
相关解决方案
- (Struts2+JSON+Ajax) XMLHttpRequest ==500如何解决
- json 解析有关问题
- struts2-json中诠注@JSON(deserialize=false)是什么用?不是阻止JSON反序列化成JAVA对象吗?求解
- 请教哪里可以上到 struts2-json-plugin-2.1.8的源文件
- java+jquery easy ui + json + struts分页例子
- ssh json jar 有关问题
- json 有关问题
- AJAX 传递数据如何样才可以是 json
- jquery.load(*json) 解析不已。求帮忙
- JSON,AJAX
- 2中,可是一直发生java.lang.NoClassDefFoundError: net/sf/json/
- json 转成 string解决办法
- json ,Map转json,全部分了
- jquery ajax+json(插件) 提交数据,让人捉摸不透的是:【部分中文显示问号】,该怎么解决
- json 序列化有错误怎么办
- JQUERY json 传值有关问题
- 获取 天候Api 返回的 json 数据
- MVC(Json) 出现提示上载
- MVC,linq,json,有关问题不知道如何描述,跪求
- json 序列化有关问题?当列名为可变数值时,如果序列化
- HttpWebRequest post json 数据,接受应该怎么获取啊
- 在于json。超级郁闷。上载了Newtonsoft.Json,可是没有JavaScriptArray属性,这是为什么呀
- 急MVC3 返回 Json 有关问题
- jquery +json +html 怎么做分页
- JSON.parse是那里定义的,小弟我在vs2008里js函数里调用了
- jqGrid json 不显示数据,该如何处理
- json 反序列化 为.net对象,该如何处理
- JQUERY AJAX JSON 有关问题 求大侠指点
- json 转成 Dataset 保存到数据库,该怎么处理
- json[0].CodeID值为undefined解决方法