1. 程式人生 > >JavaWEB前端JS向伺服器端傳送物件

JavaWEB前端JS向伺服器端傳送物件

最近專案中需要做一個關於表單資料提交的功能,由於引數很多,比如需要儲存多個學生的資料。對於這種業務當然有一種比較常見的解決方法,是使用逗號、下劃線、或者分號分割,然後傳到後臺拆分後再進行操作,這種方法需要前臺拼接,後臺解析,稍顯繁複且容易出錯。

對於搞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或者自己使用的資料庫持久層進行處理即可。