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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章