项目中经常遇到批量删除、批量导出等需求,往往需要把多个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修改之后就可以成功获取到id值了 如下图
害 又是百度了一上午 终于找到了一个正确的解决办法。。。。。