记一次Bug,最近在使用springmvc+mybatis整合实现简单的登录功能,但是在使用ajax发送请求后,controller接收到并且返回给前台数据后,不执行success中设置的window.location.href来跳转界面
以下为问题代码
$(document).ready(function () {
$("#sign-in-button").click(function () {
// alert("hello")
var username=$("#login_username").val();
var password=$("#login_password").val();
$.ajax( {
url:"${pageContext.request.contextPath}/../user/Login",
type:"post",
data:{
"username":username,
"password":password
},
async:false,
success:function (data,status) {
if(data==("wrong"))
alert("用户名或密码错误,请重新输入!")
else if(data=="correct")
{
alert(data);
window.location.href="/user/success";
}
else if(data=="wrong-repeatlogin")
{
alert("请勿重复登录!")
}
}
});
//return false ; 待会你要在这加上这个来解决
});
解决方法
在$.ajax方法外,加上return false;
为什么要加呢?
在表单中的button默认类型是submit,如果你触发ajax请求的是button,而你的button又在表单中,那么在你发送请求后,在执行success回调方法之前会提交表单,如果我们好好了解一下表单和ajax请求区别的话,可以知道表单是要刷新整个界面的,所以当你发送请求后,会提交表单,这时候你的界面就不是你之前的界面了,所以我们要让他发完请求后不要提交表单,也就是用return false终止
既然我们知道了原理,那我们也大可以这样,把button从表单拿出来,或者说不需要表单你就干脆把表单删了,反正你是ajax请求,再不济你就设置button的类型不要是submit就好了