网站建设公司起名百度指数官网首页
记一次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就好了