jquery.ajax()向后台传递数组数据问题,java后台无法接受

1、使用jquery ajax前端向后台传数据的时候有时候会传数组数据,而java后台同学接收到的数据不对;

总结一下:

var sendMsg = new Array();
sendMsg.push(1);
sendMsg.push(2);
//向后台发起ajax请求
$.ajax({
	url: "/xxx",
	type: "GET",
	data: {
		"sendMsg": sendMsg,
		 'type':1
	},
	success: function(data) {
		 //do sth...
	}
});

2、通过谷歌浏览器中查看发送的请求,发现参数为:



3、我们发现传输的数据参数的名字为sendMsg[]而不是我们定义的sendMsg,这样java后台同学的程序就接不到我们传输的数组数据。


4、解决办法:


(1)、把需要传输的数组参数改变成其他方式,比如传输成字符串,只需要把数组中的每个人值拼接一下就可以了(需要和后台同学协商格式);


var sendMsg = '';
sendMsg = sendMsg + '1' + ',';
sendMsg = sendMsg + '2';
//向后台发起ajax请求
$.ajax({
	url: "/jinyu_api/v1/register/sendMsg",
	type: "GET",
	data: {
		"sendMsg": sendMsg,
		 'type':1
	},
	success: function(data) {
		 //do sth...
	}
});


浏览器传输的数据为下图



(2)、添加traditional:true


var sendMsg = new Array();
sendMsg.push(1);
sendMsg.push(2);
//向后台发起ajax请求
$.ajax({
        url: "/jinyu_api/v1/register/sendMsg",
        type: "GET",
	traditional: true,//这里设置为true
	data: {
		"sendMsg": sendMsg,
		 'type':1
	},
	success: function(data) {
		 //do sth...
	}
});


发送的数据为



这样java后台同学就能收到数据了,万事大吉!


原因:


因为jQuery需要调用jQuery.param序列化参数,jQuery.param( obj, traditional ),默认的话,traditional为false,即jquery会深度序列化参数对象,以适应如PHP和Ruby on Rails框架,
但servelt api无法处理,我们可以通过设置traditional 为true阻止深度序列化,然后序列化结果如下:

 
 
sendMsg: ["1", "2"]=>sendMsg=1&sendMsg=2
 

猜你喜欢

转载自blog.csdn.net/xuexizhe88/article/details/78211840