一般的,可能有些人在一个参数有多个值的情况下,可能以某个字符分隔的形式传递,比如页面上有多个checkbox:
1
2
3
4
5
6
|
$.ajax{
url:
"xxxx"
,
data:{
p:
"123,456,789"
}
}
|
这时我想到了将上述代码写成这样:
1
2
3
4
5
6
|
$.ajax{
url:
"xxxx"
,
data:{
p: [
"123"
,
"456"
,
"789"
]
}
}
|
1
|
jQuery.param( obj, traditional )
|
但servelt api无法处理,我们可以通过设置traditional 为true阻止深度序列化,然后序列化结果如下:
1
|
p: [
"123"
,
"456"
,
"789"
] => p=123&p=456&p=456
|
当提交的参数是数组( {p:[value1,value2,value3]} ),如果是false的话,则提交时会是"p[]=value1&p[]=value2&p[]=value3",
后台就能用String[] ids=request.getParameterValues("p[]"); 获取到值。
如果设置成true,则提交时会是"p=value1&p=value2&p=value3"
这样后台就能用String[] ids=request.getParameterValues("p"); 获取到值。
随即,我们就可以在后台通过request.getParameterValues()来获取参数的值数组了,
所以,比如我们前台有多个checkbox,前台的代码可以写成:
1
2
3
4
5
6
7
8
9
10
|
var
values = $(
"input[type=checkbox]"
).map(
function
(){
return
$(
this
).val();
}).get();
$.ajax{
url:
"xxxx"
,
traditional:
true
,
data:{
p: values
}
}
|
jQuery.map(array,callback)
将一个数组中的元素转换到另一个数组中。
作为参数的转换函数会为每个数组元素调用,而且会给这个转换函数传递一个表示被转换的元素作为参数。转换函数可以返回转换后的值、null(删除数组中的项目)或一个包含值的数组,并扩展至原始数组中。
返回值
Array
参数
array (Array) : 待转换数组。
callback (Function) : 为每个数组元素调用,而且会给这个转换函数传递一个表示被转换的元素作为参数。函数可返回任何值。另外,此函数可设置为一个字符串,当设置为字符串时,将视为“lambda-form”(缩写形式?),其中 a 代表数组元素。如“a * a”代表“function(a){ return a * a; }”。
示例
将原数组中每个元素加 4 转换为一个新数组。
jQuery 代码:
$.map( [0,1,2], function(n){
return n + 4;
});
结果:
[4, 5, 6]