代碼如下:
<script>
$(function () {
var s = Array("1", "2", "3");
var r = 213123132;
$.ajax({
url: "/Home/Test",
type: "POST",
data: {
"ss": s,
"r": r
},
traditional: true,//這裡設定為true
success: function (data) {
//Todo
}
});
});
</script>
traditional: 阻止深度序列化
一般的,可能有些人在一個參數有多個值的情況下,可能以某個字元分隔的形式傳遞,比如頁面上有多個checkbox:
$.ajax{
url:"xxxx",
data:{
p: "123,456,789"
}
}
然後背景擷取參數後再分隔,這種做法有很大弊端,試問如果某一個參數值中出現了分隔符所使用的字元,會出現什麼情況呢?當然背景擷取的參數将與實際情況不符.
這時我想到了将上述代碼寫成這樣:
$.ajax{
url:"xxxx",
data:{
p: ["123", "456", "789"]
}
}
如果單純寫成這樣,在java背景是無法取到參數的,因為jQuery需要調用jQuery.param序列化參數,
jQuery.param( obj, traditional )
預設的話,traditional為false,即jquery會深度序列化參數對象,以适應如PHP和Ruby on Rails架構,
但servelt api無法處理,我們可以通過設定traditional 為true阻止深度序列化,然後序列化結果如下:
p: ["123", "456", "789"] => p=123&p=456&p=456
随即,我們就可以在背景通過request.getParameterValues()來擷取參數的值數組了,
是以,比如我們前台有多個checkbox,前台的代碼可以寫成:
var values = $("input[type=checkbox]").map(function(){
return $(this).val();
}).get();
$.ajax{
url:"xxxx",
traditional: true,
data:{
p: values
}
}
The end