項目中經常遇到批量刪除、批量導出等需求,往往需要把多個id封裝成數組傳到后台做業務邏輯處理。但是普通ajax請求data參數是數組,后台用數組接收不到。
一般ajax寫法
var ids= []; $.ajax({ url: 'xxxx.do',
data: { ids: ids},
dataType: "json",
type: "POST",
success: function (responseJSON) {
alert('Ok');
}
});
這樣的寫法后台用數組類型接收參數ids為null。經過多方查詢解決方案是在ajax請求時加上traditional:true,就可以了。
$.ajax({ url: 'xxxx.do', data: { ids: ids}, dataType: "json", type: "POST", traditional: true,//這里設為true就可以了 success: function (responseJSON) { alert('Ok'); } });
為什么這樣寫?traditional又是什么意思呢?下面為大家解惑:
一般我們傳數參數組時這樣寫:
data:{arr:[1,2,3]}
如果單純寫成這樣,在java后台是無法取到參數的,因為jQuery需要調用jQuery.param序列化參數:jQuery.param( obj, traditional )
默認的話,traditional為false,即jquery會深度序列化參數對象,但servelt api無法處理,我們可以通過設置traditional 為true阻止深度序列化,
然后序列化結果如下:
arr: ["123", "456", "789"] => arr=123&arr=456&arr=456
這樣之后,我們就可以在后台通過request.getParameterValues()來獲取參數的值數組了。