//批量删除 $('body').on("click", "#deleteBatch", function () { var cbs = $(".cbs"); var cbsArr = new Array(); for(var i=0; i<cbs.length; i++){ if($(cbs[i]).prop("checked")){ var q = $(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<Long> idList接受即可。非常方便。