jquery.ajax()向後臺傳遞陣列資料問題,java後臺無法接受
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阻止深度序列化,然後序列化結果如下: