ajax请求数据包含数组(集合)时需要注意

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jinyangbest/article/details/80079425

项目中经常遇到批量删除、批量导出等需求,往往需要把多个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会深度序列化参数对象,但servlet api无法处理,我们可以通过设置traditional 为true阻止深度序列化,

然后序列化结果如下:

arr: ["123", "456", "789"] => arr=123&arr=456&arr=456

这样之后,我们就可以在后台通过request.getParameterValues()来获取参数的值数组了。

猜你喜欢

转载自blog.csdn.net/jinyangbest/article/details/80079425