1.$.ajax contentType 和 dataType , contentType 主要设置你发送给服务器的格式,dataType设置你收到服务器数据的格式。
2.ajax 一般默认为“application/x-www-form-urlencoded; charset=UTF-8”
3.添加 contentType:“application/json“之后,向后台发送数据的格式必须为json字符串
function login(){
$.ajax({
type:'post',
url:'${ctx}/sysUser/save222',
contentType:"application/json;charset=UTF-8",
data:JSON.stringify({
'userName':$('#userName').val(),
'password':$('#password').val()
}),
dataType:"json",
success:function (date) {
}
});
}
这时候后台获取数据使用@RequestBody注解成SysUser对象(前台传过来的值要和对象中字段名一致)或者使用@RequestBody Map map注解成map来获取值--------》
//测试使用后台数据校验
@PostMapping(value = "save111")
public MsgBody save111(HttpServletRequest request,@Valid @RequestBody SysUser sysUser, BindingResult result ){
MsgBody msgBody = new MsgBody();
if(result.hasErrors()){
List<ObjectError> ls=result.getAllErrors();
for (int i = 0; i < ls.size(); i++) {
System.out.println("error:"+ls.get(i).getDefaultMessage());
msgBody.setMsg(ls.get(i).getDefaultMessage());
return msgBody;
}
}
msgBody.setCode(Constant.Error.getCode());
msgBody.setMsg("保存数据失败");
try{
getBaseService().save(sysUser);
msgBody.setCode(Constant.Success.getCode());
msgBody.setMsg("保存数据成功");
}catch (RuntimeException e){
msgBody.setCode(Constant.Error.getCode());
}
return msgBody;
}
4.
不添加 contentType:“application/json“的时候可以向后台发送json对象形式
function login(){
$.ajax({
type:'post',
url:'${ctx}/sysUser/save222',
//contentType:"application/json;charset=UTF-8",
data:{
'userName':$('#userName').val(),
'password':$('#password').val()
},
dataType:"json",
success:function (date) {
}
});
}
这时候后台获取数据--------》
@PostMapping(value = "save222")
public MsgBody save222(HttpServletRequest request){
MsgBody msgBody = new MsgBody();
msgBody.setCode(Constant.Error.getCode());
msgBody.setMsg("保存数据失败");
try{
SysUser sysUser=new SysUser();
sysUser.setPassword(request.getParameter("password"));
getBaseService().save(sysUser);
msgBody.setCode(Constant.Success.getCode());
msgBody.setMsg("保存数据成功");
}catch (RuntimeException e){
msgBody.setCode(Constant.Error.getCode());
}
return msgBody;
}
5.另外,当向后台传递复杂json的时候,同样需要添加 contentType:“application/json“,然后将数据转化为字符串
var data = {
uploadarray: uploadarray,
messageInfo: {
messageTitle: messageTitle,
messageContent: messageContent,
publisher: publisher
},
userId: userId
}
$.ajax({
type: 'post',
url: "mobile/notice/addMessageInfo.jspx",
contentType: 'application/json',
data: JSON.stringify(data),
dataType: "json",
success: function(data) {
console.log(data);
},
error: function(msg) {
console.log(msg)
}
})
JSON.parse()与JSON.stringify()的区别
JSON.parse()【从一个字符串中解析出json对象】
例子://定义一个字符串var data='{"name":"aaa"}'
//解析对象JSON.parse(data)结果是:name:"aaa"
JSON.stringify()【从一个对象中解析出字符串】
var data={name:'aaa'} JSON.stringify(data) 结果是:'{"name":"aaa"}'