使用struts2+jquery进行ajax异步通信时,如何传输一个包含有多个属性的VO对象呢?
比如说,注册一个用户,用户包含username,pwd,sex等多个信息,当然最简单的方法是使用下面这种格式传输:username=“uname”&pwd=“pwd”&sex=“male”,但是我们可以直接做成一个UserVO来传输,也方便后台使用。
上面的parseParam(param, key)这个函数就是将用户传入的一个param对象(可以是一个数组或者json对象,或者字符串什么的),解析成ajax能识别的带有“&”的字符串,并且将其以用户指定的key命名的VO封装(这个动作是有struts2自动完成的,注意这里的key的值要等于后台action中VO的变量名)。
另外,为了防止工程在服务器上发布后出现找不到url的路径,可以将ajax的option中的url不要写死在js中,而是将action的url写在jsp的一个hidden域中,然后js去读取这个值,如下:
比如说,注册一个用户,用户包含username,pwd,sex等多个信息,当然最简单的方法是使用下面这种格式传输:username=“uname”&pwd=“pwd”&sex=“male”,但是我们可以直接做成一个UserVO来传输,也方便后台使用。
$("#registBtn").click(function() { var opeInfo = { "opeId":$("#opeIdText").val().trim(), "opeName1":$("#opeName1Text").val().trim(), "email":$("#emailText").val().trim(), "opeGrpId":$("#opeGrpCombo option:selected").val().trim() }; var options = { url:$("#operegist_action").val(), type:'POST', dataType:'json', data:parseParam(opeInfo, 'operatorVO'), success: registResponse }; $.ajax(options); }); /** * Jqueryオブジェクトをajaxの出力フォーマット(id1=key1&id2=key2&...)へ変換する関数 * * @param param jqueryオブジェクト * @param key VOオブジェクト名 * @returns ajax出力フォーマットの文字列 */ function parseParam(param, key) { var paramStr = ""; if (param instanceof String || param instanceof Number || param instanceof Boolean) { paramStr += "&" + key + "=" + encodeURIComponent(param); } else { $.each(param, function(i) { var k = key == null ? i : key + (param instanceof Array ? "[" + i + "]" : "." + i); paramStr += '&' + parseParam(this, k); }); } return paramStr.substr(1); }
上面的parseParam(param, key)这个函数就是将用户传入的一个param对象(可以是一个数组或者json对象,或者字符串什么的),解析成ajax能识别的带有“&”的字符串,并且将其以用户指定的key命名的VO封装(这个动作是有struts2自动完成的,注意这里的key的值要等于后台action中VO的变量名)。
另外,为了防止工程在服务器上发布后出现找不到url的路径,可以将ajax的option中的url不要写死在js中,而是将action的url写在jsp的一个hidden域中,然后js去读取这个值,如下:
<input type="hidden" id="operegist_action"
value="<s:url namespace="/opemgr_ajax" action="operegist"/>">