spring mvc ajax success不执行 反倒执行error

Posted gqblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring mvc ajax success不执行 反倒执行error相关的知识,希望对你有一定的参考价值。

问题描述:spring mvc中前端使用ajax发送请求,后台使用@ResponseBody直接写数据到响应体中,

返回一个字符串,ajax的success回调函数不执行,反而执行error的回调函数

上代码:

ajax请求:

$.ajax({
                url:"/eCommerceSSM/updateAdmin",
                type:"put",
                data:JSON.stringify({admin_id:$("#form_update_admin input[name=‘admin_id‘]").val(),
                    admin_name:$("#form_update_admin input[name=‘admin_name‘]:not(:disabled)").val(),
                    admin_password:$("#form_update_admin input[name=‘pwd‘]:not(:disabled)").val()
                }),
                dataType:"json",
                contentType: "application/json;charset=utf-8",
                success:function(data){
                    console.log("update admin is returned");
                    console.log("======"+data.msg+",");
                    //修改失败
                    alert(data.msg+"---ddddd");
                    if(data.msg=="fail"){
                        alert("修改失败,可能用户名已被占用");
                    }else{
                        alert("修改成功");
                        showAdminList(curPage,pageSize);
                        $("#updateAdmin").modal("hide");
                    }

     },error:function(error){

      console.log(error);

      //此处可以打印出响应的信息,响应状态也是200,响应的字符串也存在属性responseText中,数据库修改成功了

    }  

})

controller:

//修改admin
    @RequestMapping(value="/updateAdmin",method=RequestMethod.PUT)
    @ResponseBody
    public String updateAdmin(@RequestBody Admin admin) {
        String msg=null;
        System.err.println("new admin:"+admin);
        if(as.updateAdminPart(admin)>0) {
            System.err.println("修改admin成功。。。。");
            msg="success";
        }else {
            System.err.println("修改admin失败.......");
            msg="fail";
        }
        return msg;
    }

我的项目中相关配置:

//将spring mvc的响应对象自动转成json格式

  <!-- 自动将查询到的数据,转成json格式 -->
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.5</version>
    </dependency>

 

最后问题的解决:

将controller中代码返回值改成ModelMap,将响应的字符串放入

 

//这个问题的造成原因:  data:JSON.stringify({admin_id:$("#form_update_admin input[name=‘admin_id‘]").val(),
                    admin_name:$("#form_update_admin input[name=‘admin_name‘]:not(:disabled)").val(),
                    admin_password:$("#form_update_admin input[name=‘pwd‘]:not(:disabled)").val()
                })

 

为什么怀疑是这个呢?因为我有一个添加的ajax请求,data也是使用JSON.stringify()进行的转换,也会出现响应成功了,但是不执行success的回调函数;

我将data的JSON.stringify()去掉就用普通的data:{}形式就可以正常的执行success

 

//希望能帮到你。。们

 












































以上是关于spring mvc ajax success不执行 反倒执行error的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc $.ajax没有指定contentType ,导致后台无法接收到数据

ajax请求 spring mvc responsebody 注解的方法 为啥写不了cookie

从控制器返回后没有调用 Ajax Success 函数? MVC

Spring MVC —— 前后台传递JSON

java开发中为啥我的spring mvc后台接收不到前台传来的参数?

如何从 ASP.NET MVC 控制器返回 Ajax“失败”?