struts2+ajax 传输用户自定义的对象,而非字符串

使用struts2+jquery进行ajax异步通信时,如何传输一个包含有多个属性的VO对象呢?
比如说,注册一个用户,用户包含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"/>">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未子涵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值