哈喽大家好:我是沈阳爱尚java培训的蔡老师,今天给大家带来的是ajax从前台向后台传数组问题的分析和详解。
欢迎使用Markdown编辑器
//批量删除
$(‘body’).on(“click”, “#deleteBatch”, function () {
var cbs = KaTeX parse error: Expected '}', got 'EOF' at end of input: …h; i++){ if((cbs[i]).prop(“checked”)){
var q =
(
c
b
s
[
i
]
)
.
p
a
r
e
n
t
(
)
.
p
a
r
e
n
t
(
)
.
c
h
i
l
d
r
e
n
(
)
;
q
=
N
u
m
b
e
r
(
(cbs[i]).parent().parent().children(); q = Number(
(cbs[i]).parent().parent().children();q=Number((q[q.length-1]).html());
cbsArr.push(q);
}
}
cbsArr = toString(cbsArr);
console.log(cbsArr);
$.ajax({
url:'NewsDeleteBatchServlet',
type:'post',
async:true,
//ajax的traditional属性
//traditional:true,
data:{
cbsArr:cbsArr
},
success:function(){
//window.location.replace('NewsTablePage.jsp');
}
})
})
通过勾选复选框,获取参数,进行批量操作.
jq获取的是集合或者数组,通过ajax传递到后台,后台使用 req.getParameter( ) 去接收这个参数,结果发现无法获取,得到的是 null.
经过在网络上搜索之后,发现了 解决方法
方案一: ajax的data属性要为String格式,我们可以先把代码中的cbsArr先改为String类型,然后再往后传参数.可以仿照JAVA中的Arrays.toString()来写一个.也就是:
function toString(arr){
var b = ‘’;
for(var i = 0 ; i < arr.length ;i++){
if(arr[i] != null){
b = b +"’"+ arr[i] +"’";
if( i == arr.length-1){
return b;
}
b = b + ‘,’;
}
}
}
这样,后台就可以得到了数据了
方案二: 我们可以为ajax添加一个traditional:true 属性.
traditional:true
查询这个属性得知,这个属性默认是false,jquery会深度序列化这个对象,以适应PHP等框架,我们可以通过设置tradtional为true阻止深度序列化
设置traditional属性后,data就可以传递集合或数组的类型了.后台要通过
String[] arrs = req.getParameterValues(“cbsArr”);
getParameterValues来接收数组或集合参数.
这样以后碰到复选框传多个id的时候就不用前台拼后台spilt了或者toString了,直接用ajax的traditional属性,传过去一个数组,后台直接一个List idList接受即可。非常方便。