Ajax向后台发送数组等复杂参数时的解决方案

前言:在很多时候,前台传递的参数是数组,这时不好拼接成字符串的键值对参数,那可以按照如下方式解决:

1、添加”traditional:true”参数和contentType: 'application/json;charset=UTF-8'

traditional:是否使用传统的方式浅层序列化。

contentType:"application/json":向后台发送数据的格式必须为json字符串,向后台发送的数据为复杂json数据时,也必须设置contentType为"application/json"

数组或jQuery对象会按照name/value对进行序列化,普通对象按照key/value对进行序列化

注:可以把数组封装到json对象里面,如果要单传数组也是可以的。

var arr=new Array();
arr[0]='param';
arr[1]='param2';
$.ajax({
    url:请求地址,
    type:"POST",
    data:JSON.stringify(arr),
    contentType: 'application/json',
    traditional:true, //默认false
    success:function(){
        //do something
    }
});

通过ajax提交数组时,会自动在所设定的参数后面增加中括号:“[]”,导致后端spring MVC中的@RequestParam获取不到参数。

ajax请求时增加:traditional: true 就可以正常提交了。原因如下:

jQuery会调用jQuery.param序列化参数,jQuery.param( obj, traditional ),默认的话,traditional为false,即jquery会深度序列化参数对象,以适应如PHP和Ruby on Rails框架,但servelt api无法处理,我们可以通过设置traditional 为true阻止深度序列化。

2、后台接收:

注:后台接收可以使用数组或者list,如果使用list,泛型就根据前台数组里面参数的类型决定。

@PostMapping("/more_delete")
@ResponseBody
public String moreDeleteToCarts(@RequestBody List<Integer> params) {//@RequestBody Integer[] params
    //do something...
    return null;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值