Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在SpringMVC方法正确运行之后,ajax会显示错误消息?_Java_Ajax_Spring Mvc_Jakarta Ee - Fatal编程技术网

Java 为什么在SpringMVC方法正确运行之后,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"

我再次指出,方法中没有错误,我不理解为什么只有ajax显示错误消息。 我假设问题出在方法的返回值上,但我不太明白如何处理它

<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来做错误处理程序?仍然只有在异常情况下才会在错误部分返回错误…否则您也可以从控制器返回失败,这样您就可以在成功中添加一个失败条件。