1. 程式人生 > >jquery.ajax()向後臺傳遞陣列資料問題,java後臺無法接受

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)、新增traditionaltrue

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 ),預設的話,traditionalfalse,即jquery會深度序列化引數物件,以適應如PHPRuby on Rails框架,servelt api無法處理,我們可以通過設定traditional true阻止深度序列化,然後序列化結果如下: