WEB前端向服务器端发送对象
最近项目中需要做一个关于批量删除的功能,删除条件有多个,需要从页面全部传给后台服务器程序,单个的删除,可以拼接参数给url,服务器端获取参数后执行删除操作即可。但是批量删除多个,参数会很多,传递就有些麻烦。当然有一种比较常见的解决方法,是使用逗号、下划线、或者分号分割,然后传到后台拆分后再进行操作,这种方法需要前台拼接,后台解析,稍显繁复且容易出错。对于搞JAVA程序的我来说,显得不是很面向对象。于是很自然的想到了使用json字符串进行传递数据,具体步骤如下:
1、先把想要传递的参数封装成js对象,代码样例如下:
var params = []; var param = {}; param["aaa"] = "a"; param["bbb"] = true; param["ccc"] = 2; params.push(param);
2、接下来把js对象转成json字符串,比较常见的做法是使用JSON.stringfy(),尝试一番之后发现IE8浏览器并不支持(该方法对谷歌、火狐、以及IE9以上版本浏览器完美支持),而我们当前的产品只支持IE浏览器,转而求救谷歌百度,找到一个比较通用的js方法,代码如下:
function obj2Str(obj) { switch (typeof (obj)) { case 'object': var ret = []; if (obj instanceof Array) { for (var i = 0, len = obj.length; i < len; i++) { ret.push(obj2Str(obj[i])); } return '[' + ret.join(',') + ']'; } else if (obj instanceof RegExp) { return obj.toString(); } else { for (var a in obj) { ret.push(a + ':' + obj2Str(obj[a])); } return '{' + ret.join(',') + '}'; } case 'function': return 'function() {}'; case 'number': return obj.toString(); case 'string': return '"' + obj.replace(/(\\|\")/g, '\\$1').replace(/\n|\r|\t/g, function (a) { return ('\n' == a) ? '\\n' : ('\r' == a) ? '\\r' : ('\t' == a) ? '\\t' : ''; }) + '"'; case 'boolean': return obj.toString(); default: return obj.toString(); } }
3、前台封装好以后,使用ajax请求到后台,JAVA解析json字符串的方法不少,可以在网上找写好的方法,当然也可以使用json-lib-xxx.jar,这个jar包在项目中应用很广泛,LZ上一家公司就使用其做了大量json转化工作,使用方法如下:
JSONArray jsonArray = JSONArray.fromObject(jsonStr); List<Map> cmdList = (List<Map>)JSONArray.toCollection(jsonArray, Map.class);
4、通过内置方法转化成集合,再传递到ibatis或者自己使用的数据库持久层进行处理即可。
相关推荐
PncLogon 2020-09-24
杏仁技术站 2020-09-18
颤抖吧腿子 2020-09-04
liangjielaoshi 2020-08-19
viewerlin 2020-08-19
SHINESUNNY 2020-08-11
RainyX 2020-07-26
haohong 2020-07-18
学习web前端 2020-07-18
quanquanxiu 2020-07-04
xxuncle 2020-07-04
liangjielaoshi 2020-06-25
quanquanxiu 2020-06-12
RainyX 2020-06-12
haohong 2020-06-10
starzhangkiss 2020-06-10
学习web前端 2020-06-07