数组
方法一:拼接字符串参数
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;
}