Ajax发送请求传递数组、Map参数

数组

方法一:拼接字符串参数

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;
    }

 

版权声明:
作者:黯然gg
链接:https://3zi.cn/archives/285
来源:阿龙爱吃肉
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录