关于ajax传送数组对象后台接收的问题

前几天一直在看与公司项目相关的代码,今天终于有机会进行实际的开发了。大笑

说一下今天遇到的问题。。。


前台使用ajax传递到后端的数据为对象数组的形式,如:

$.ajax({
	url : '/win/getAllTopicName.action',
	data:{
		'topicName':"专题视频2",
		'cameralInfo':[
			{"name":"lee","age":3},
			{"name":"lee","age":3},
			{"name":"lee","age":4},
			{"name":"lee","age":7}				
		])
	    },
	contentType:"application/x-www-form-urlencoded; charset=utf-8",
	type : 'get',
	async : false,
	success : function (data) {	
	alert(data);
       }
});

后台springMV使用的数据接收方式为:

public String saveTopic(String topicName,String cameralInfo)

这样接收到的数据总是null,通过测试发现,当前端传递数组时,会自动将传递的参数的名称后面加上[],即实际的参数名为cameralInfo[], 因此我们使用cameralInfo 是无法接收到数据的,解决这个问题的方法是在ajax请求中加上traditional:true,


之后我们发现能接收到数据了,但是接收到的数据为[{object,object}{object,object}]的形式,及无法解析到数组中的对象值,按照平时的解决方法是在前台将数组对象使用逗号分隔,转换成字符串,后台再进行解析。

实际上更简单的操作方式是使用JSON 的stringify()方法,该方法能够将对象类型转换成字符串,具体的用法可以参考http://www.jb51.net/article/29893.htm


最终将ajax传递数组对象的方式改为

$.ajax({
	url : '/win/getAllTopicName.action',
	data:{
		'topicName':"专题视频2",
		'cameralInfo':JSON.stringify([
			{"name":"lee","age":3},
			{"name":"lee","age":3},
			{"name":"lee","age":4},
			{"name":"lee","age":7}				
		])
	},
	traditional:true,
	contentType:"application/x-www-form-urlencoded; charset=utf-8",
	type : 'get',
	async : false,
	success : function (data) {	
		alert(data);
		}
 });


这样就能在后台使用string来接收参数,在使用JSONArray.parseArray()方法将其转换为JSONArray的形式,这样就能更方便的对其进行操作。


希望能对碰到此类问题的博友们有帮助。。。。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值