这个问题迷惑了我好几天,都快要放弃了,功夫不负有心人,最终成功解决,下面写一下我的解决方法。
我传的数据是json类型的,执行失败的回调函数是因为从后台传过来的数据不是严格的json类型,所以才会不执行成功的回调函数。
下面贴一下我的代码
Controller
@RequestMapping(value="/reg") ???@ResponseBody ???public Map<String,Object> Register(User user) throws IOException{ ???????Map<String,Object> map = new HashMap<String,Object>(); ???????boolean isSuccess = userService.Register(user); ???????if(isSuccess){ ???????????map.put("tip", "success"); ???????} ???????else{ ???????????map.put("tip", "error"); ???????} ???????return map; ???}
jsp
$.ajax({
??type:‘POST‘,
??data: {"email":email,"password":password,"type":type},
??url:‘user/reg‘,
??async:false,
??dataType: ‘json‘,
??success:function(response){
?????????alert(response.tip);
?????????$(form).find(":submit").attr("disabled", false);
?????},
???error:function(response){
?????????alert(response.tip);
?????????$(form).find(":submit").attr("disabled", false);
?????}
?});
注意我使用了注解@ResponseBody,该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
要想使用@ResponseBody需要在配置文件中启用注解,下面是启用注解的代码
?<!--开启注解--> ???<mvc:annotation-driven />
SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面
除了一些spring的包之外,还需要jackson-annotations.jar , jackson-core.jar , jackson-databind.jar 这三个包
<dependency> ???????????<groupId>com.fasterxml.jackson.core</groupId> ???????????<artifactId>jackson-databind</artifactId> ???????????<version>2.5.4</version> ???????</dependency> ???????<dependency> ???????????<groupId>com.fasterxml.jackson.core</groupId> ???????????<artifactId>jackson-core</artifactId> ???????????<version>2.5.4</version> ???????</dependency> ???????<dependency> ???????????<groupId>com.fasterxml.jackson.core</groupId> ???????????<artifactId>jackson-annotations</artifactId> ???????????<version>2.5.4</version> ???????</dependency>
$.ajax数据传输成功却执行失败的回调函数
原文地址:https://www.cnblogs.com/lwx521/p/8425803.html