解決Ajax異步請求中傳數組參數,后台無法接收問題


  項目中經常遇到批量刪除、批量導出等需求,往往需要把多個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()來獲取參數的值數組了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM