Java 为什么在SpringMVC方法正确运行之后,ajax会显示错误消息?
我再次指出,方法中没有错误,我不理解为什么只有ajax显示错误消息。 我假设问题出在方法的返回值上,但我不太明白如何处理它Java 为什么在SpringMVC方法正确运行之后,ajax会显示错误消息?,java,ajax,spring-mvc,jakarta-ee,Java,Ajax,Spring Mvc,Jakarta Ee,我再次指出,方法中没有错误,我不理解为什么只有ajax显示错误消息。 我假设问题出在方法的返回值上,但我不太明白如何处理它 <script type="text/javascript"> $('form.changeRoleForm').on('submit', function(e) { e.preventDefault(); var data= { "id": $(this).children("input.id"
<script type="text/javascript">
$('form.changeRoleForm').on('submit', function(e) {
e.preventDefault();
var data= {
"id": $(this).children("input.id").val(),
"role" : $(this).children("select.role").val()
};
$.ajax({
type: 'POST',
contentType: "application/json",
dataType: "json",
url: 'changerole',
data: JSON.stringify(data),
success: function() {
alert("Role "+ data.role+" of user by id "+data.id+" was successfully installed!");
location.reload();
},
error: function(){
alert("Something went wrong. Role not updated");
$(this).css('color', 'green');
location.reload();
$(this).css('color', 'red');
}
});
});
</script>
$('form.changeRoleForm')。关于('submit',函数(e){
e、 预防默认值();
风险值数据={
“id”:$(this.children(“input.id”).val(),
“角色”:$(this.children(“select.role”).val()
};
$.ajax({
键入:“POST”,
contentType:“应用程序/json”,
数据类型:“json”,
url:'changerole',
数据:JSON.stringify(数据),
成功:函数(){
警报(“已成功安装id为“+data.id+”的用户的角色“+data.Role+”);
location.reload();
},
错误:函数(){
警报(“出现问题。角色未更新”);
$(this.css('color','green');
location.reload();
$(this.css('color','red');
}
});
});
来自控制器的方法:
@RequestMapping(method = POST, value = "changerole")
public String changeRole(@RequestBody String jsonData) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map;
map = mapper.readValue(jsonData, HashMap.class);
String role = map.get("role");
String id = map.get("id");
User user= userDAO.findById(Integer.valueOf(id));
user.setRole(role);
userDAO.update(user);
return "success";
}
@RequestMapping(方法=POST,value=“changerole”)
公共字符串changeRole(@RequestBody String jsonData)引发IOException{
ObjectMapper mapper=新的ObjectMapper();
地图;
map=mapper.readValue(jsonData,HashMap.class);
字符串role=map.get(“角色”);
String id=map.get(“id”);
User=userDAO.findById(Integer.valueOf(id));
user.setRole(角色);
更新(用户);
返回“成功”;
}
发生这种情况是因为控制器返回的是正常的文本字符串,而不是有效的JSON
响应
确保控制器返回有效的JSON
@RequestMapping(method = POST, value = "changerole")
@ResponseBody
public ResponseEntity<String> changeRole(@RequestBody String jsonData) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map;
map = mapper.readValue(jsonData, HashMap.class);
String role = map.get("role");
String id = map.get("id");
User user= userDAO.findById(Integer.valueOf(id));
user.setRole(role);
userDAO.update(user);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=utf-8");
return new ResponseEntity<String>("{\"msg\":\"success\"}", headers, HttpStatus.OK);
}
像下面这样更新您的方法以返回有效的JSON
@RequestMapping(method = POST, value = "changerole")
@ResponseBody
public ResponseEntity<String> changeRole(@RequestBody String jsonData) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map;
map = mapper.readValue(jsonData, HashMap.class);
String role = map.get("role");
String id = map.get("id");
User user= userDAO.findById(Integer.valueOf(id));
user.setRole(role);
userDAO.update(user);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=utf-8");
return new ResponseEntity<String>("{\"msg\":\"success\"}", headers, HttpStatus.OK);
}
返回的头应该是什么?更新的答案..HttpHeaders headers=new HttpHeaders();添加(“内容类型”、“应用程序/json;字符集=utf-8”);。。检查一次,让我知道是否有任何问题。我正确理解这一点,现在使用行:if(response.msg=='success')我不需要ajax来做错误处理程序?仍然只有在异常情况下才会在错误部分返回错误…否则您也可以从控制器返回失败,这样您就可以在成功中添加一个失败条件。