JavaWEB前端JS向伺服器端傳送物件
阿新 • • 發佈:2019-02-04
最近專案中需要做一個關於表單資料提交的功能,由於引數很多,比如需要儲存多個學生的資料。對於這種業務當然有一種比較常見的解決方法,是使用逗號、下劃線、或者分號分割,然後傳到後臺拆分後再進行操作,這種方法需要前臺拼接,後臺解析,稍顯繁複且容易出錯。
對於搞JAVA程式的我來說,顯得不是很面向物件。於是很自然的想到了使用json字串進行傳遞資料,具體步驟如下:1、先把想要傳遞的引數封裝成js物件,程式碼樣例如下:
2、接下來把js物件轉成json字串,java培訓機構中比較常見的做法是使用JSON.stringfy(),嘗試一番之後發現IE8瀏覽器並不支援(該方法對谷歌、火狐、以及IE9以上版本瀏覽器完美支援),而我們當前的產品只支援IE瀏覽器,轉而求救谷歌百度,找到一個比較通用的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;
//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或者自己使用的資料庫持久層進行處理即可。