JavaWEB前端JS向服务器端发送对象

来源:互联网 发布:mac兼容windows软件 编辑:程序博客网 时间:2024/06/07 09:16

最近项目中需要做一个关于表单数据提交的功能,由于参数很多,比如需要保存多个学生的数据。对于这种业务当然有一种比较常见的解决方法,是使用逗号、下划线、或者分号分割,然后传到后台拆分后再进行操作,这种方法需要前台拼接,后台解析,稍显繁复且容易出错。

对于搞JAVA程序的我来说,显得不是很面向对象。于是很自然的想到了使用json字符串进行传递数据,具体步骤如下:1、先把想要传递的参数封装成js对象,代码样例如下:

                var param = {};param.name = "张三3";param.age = "253";param.tell = "187230566933";var params = {};params.name = "张三2";params.age = "252";params.tell = "187230566932";params.param = param;
2、接下来把js对象转成json字符串,java培训机构中比较常见的做法是使用JSON.stringfy(),尝试一番之后发现IE8浏览器并不支持(该方法对谷歌、火狐、以及IE9以上版本浏览器完美支持),而我们当前的产品只支持IE浏览器,转而求救谷歌百度,找到一个比较通用的js方法,代码如下:

//js对象转成json字符串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或者自己使用的数据库持久层进行处理即可。


0 0