控制器:
@RequestMapping("fam")
@RestController
public class FamController extends BaseController {
@Autowired
private InteviewerFamilyService service;
@RequestMapping("save")
public JsonResult<List<Integer>> saveFam(@RequestBody List<InterviewerFamily> familyList) {
List<Integer> result = service.saveFamily(familyList);
return new JsonResult<>(SUCCESS, result);
}
}
JS:
let ajax1 = $.ajax({
"traditional":"true",
"url":"/edu/save",
"data":JSON.stringify(eduList),//因为是对象集合需要JSON.stringfy();后端解析则是JSON.parse()
"dataType":"json",
"contentType": "application/json;charset=UTF-8",//不能再用默认,
"type":"post",
"success":function (json) {
let state = json.state;
if (state == 2000){
console.log("教育经历提交成功!"+json.data);
eduNumList = json.data;
}else {
console.log("教育经历提交失败!");
}
},"error":function () {
alert("error");
}
})
在等前面ajax完成以后在操作,
$.when(ajax1,ajax2,ajax3).done(function () {
//dosomething
}
关于traditional:(转载,原创地址:https://www.jianshu.com/p/f63f538a004e)
traditional默认值是false。ajax做数据处理时,是通过jQuery.param( obj, traditional )该方法进行处理。
jquery1.4版本以后
traditional参数,默认false的时候如果是{a:{b:‘value’}}是处理成a[b],这样形式,如果是数组:data:{a:[1,2]},是解析成a[]=1&a[]=2,这种方式后台确实要做兼容(取a[b]或a[])来取值。
在数组情况下把traditional参数设置成true,是解析成a=1&a=2,对后台直接通过a拿数据。但是实验了下object情况,把traditional设置成true,转成了a=[object+Object],这样就是费的了。false时解析成上面的形式应该就是类型指示作用,我看到这种格式就知道请求数据是Array还是object了,true就是按照form提交的方式传值。
针对object请求传值,如何和服务器端配合:
如果是get请求,可以按照
{data: {a:encodeURIComponent(JSON.stringify(xxx))}
这样后端需要拿到a然后再进行parse。
比较建议采用POST传值,代码:
$.ajax({
url:'xxx',
type:'post',
contentType: "application/json;",
data:JSON.stringify({a:{b:1}})
})
这样后端只需要通过加个注解@RequestBody,就会解析成一个java bean对象(注:这个java bean必须包含所有的json结构,如果不包含会报错),这样在devTool中可以看到很清晰的请求参数结构的。
附官网几个例子:
// <=1.3.2:版本号,traditional为true的情况
$.param({ a: [ 2, 3, 4 ] }); // "a=2&a=3&a=4"
// >=1.4:版本号
$.param({ a: [ 2, 3, 4 ] }); // "a[]=2&a[]=3&a[]=4"
// <=1.3.2:
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] });
// "a=[object+Object]&d=3&d=4&d=[object+Object]"
// >=1.4:
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] });
// "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"