記一次在用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