这几天做课设,记一个小问题。
因为不太会用js,大部分代码都是用时候百度,或者看老师的代码直接照葫芦画瓢。
在做用户登录注册表单的时候,想要登录失败或者是注册时用户名不重复,做一个弹窗,用js来做判断,
向后台发送了请求返回了数据之后,一切都顺利,只有在return false时,会出错。
知道了οnsubmit=“return yourfunction(thisfrom);” 如果返回 true 则表单提交,如果返回false 则表单不会向上提交,我一开始代码是这样子写的:
表单头部标签
<form action="/loandre/doregist" οnsubmit="return isSubmit(this);" method="post">
function isSubmit(thisform) {
var username = document.getElementById("usernameTextR").value.trim();
var password = document.getElementById("passwordTextR").value.trim();
if(username == "" || password == ""){
alert("用户名密码不能为空");
return false;
}
var taf = true;
//重点在这里!!!!!!
$.ajax({
type:'GET',
url : "/loandre/isRepeat?username="+username,
success:function (respond) {
taf = respond.isok
if(!taf) {
alert("该用户名已被注册,再换一个试试?")
return false;
}
}
})
return true;
}
意思就是用户名重复了返回false之后表单不提交,看似好像没什么毛病,我傻fufu的认为没毛病,好几天都认为没毛病,很纳闷。
今天终于知道了,是因为这个 async:false ,在ajax发送请求的之前,要把这个加上,意思就是说 是同步的,当async的值为true的时候,表示是异步,而且它是默认异步,异步就代表它和ajax之外的代码不是同步的,会导致外面的taf即使是在ajax里面进行了赋值weifalse,taf仍然为true,也就是我为啥会出错了,把它改成false,同步加载,taf赋值成功,另外在ajax里面return false 并不会返回给onsubmit把它用一个变量接受,在ajax代码外去retrun false,就好,贴上最后改动的部分正确代码
var taf = true;
$.ajax({
type:'GET',
async:false,
url : "/loandre/isRepeat?username="+username,
success:function (respond) {
taf = respond.isok
}
})
if (taf){
return true;
}else{
alert("该用户名已被注册,再换一个试试?")
return false;
}