记一次在用SSM框架写一个在注册时,异步的鼠标检测用户名是否存在的功能
在完成这个功能的时候,遇到了许多的BUG,最头疼的一个就是使用Ajax向后端发送数据,而后端返回数据时候,一直走的是error这个方法。
因为这个问题整整的浪费了我一整天的时间,也百度了许多关于这个问题的原因,网上需要博主都说是json数据的问,还有就是ajax中的dataType的原因,我全部都试了一遍,还是走error。
首先说一下如何排除的这个BUG:
首先在后台打印一下能否接收到前端传来的参数,然后能接收到说明已经调用了后端的方法了。
后端代码如下:
//检查用户是否存在
@RequestMapping("/checkUser.do")
@ResponseBody
public Message checkUser(String username) throws Exception {
System.out.println("=================================="+username);
List<UserInfo> list=userService.checkUser(username);
if (list.size()>0){
//用户名存在
Message msg=new Message(true);
msg.setMsg("用户名已经存在");
return msg;
}else {
Message msg=new Message(false);
return msg;
}
}
再来看一下ajax,先在success和error方法中alert()一下,看调用了哪一个,不出所料一直都时error,然后在error中通过console.log(data)查看一下。如下:
$(function () {
$("#username").blur(function () {
var username = $(this).val();
$.ajax({
url:"${basePath}/user/checkUser.do",
data:{username:username},
type:"POST",
success:function (data) {
$("#errorMsg").html(data.msg)
},
error:function (error) {
console.log(error)
}
})
})
})
通过F12查看到有两个错误
1.No converter found for return value of type
2.ajaxValidate is not defined
我检查了下ajax没问题,说明是第一个问题的原因,然后我就从导包开始检查,去搜索了一下看是否有json相关依赖,竟然一个没有,然后就添加了如下三个依赖:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20151123</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.7</version>
</dependency>
然后再重新去试了一下,终于走了success。
总结:
在使用什么之前,应该先进行导包。如果再出现错误,就从后端到前端一步一步进行排查,打印一下出现的错误。利用好浏览器DEBUG