数组

方法一:拼接字符串参数

var arr={params:['param','param2']};
$.ajax({url:请求地址,
            data:arr,
            type:"POST",
            success:function(){
                //do something
            }
});

方法二:ajax提交添加”traditional:true”参数

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

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

var arr=new Array();
arr[0]='param';
arr[1]='param2';
$.ajax({url:请求地址,
            data:{params:arr},
            type:"POST",
            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阻止深度序列化。

Map<String,Object>

前端ajax

参数

{
    "cdLabel": "111",
    "downloadPath": "E:\\Downloads",
    "passList": [
        {
            "guid": "20210511161029-b63d0",
            "name": "2222",
            "iChannelNum": 33,
            "iChannelName": "保安室西"
        }
    ]
}

ajax

        $.ajax({
            type:"post",
            url:"/insertDownTaskAndPass" ,
            data: JSON.stringify(data),
            contentType : 'application/json;charset=utf-8',
            processData : false,
            dataType : 'text',
            success: function(result) {
            if(result){
                layer.msg("下载任务添加成功!");
            }else{
                layer.msg("下载任务添加失败!");
            }
            layer.close(index);
        }});

Controller接收

    @PostMapping(value = "/insertDownTaskAndPass")
    public boolean insertDownTaskAndPass(@RequestBody Map taskMap){
        return downTaskService.insertDownTask(taskMap) > 0;
    }

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注