ajax发请求,onsubmit中return false不起作用的问题

这几天做课设,记一个小问题。

因为不太会用js,大部分代码都是用时候百度,或者看老师的代码直接照葫芦画瓢。

在做用户登录注册表单的时候,想要登录失败或者是注册时用户名不重复,做一个弹窗,用js来做判断,

向后台发送了请求返回了数据之后,一切都顺利,只有在return false时,会出错。

知道了onsubmit=“return yourfunction(thisfrom);” 如果返回 true 则表单提交,如果返回false 则表单不会向上提交,我一开始代码是这样子写的:


表单头部标签
<form action="/loandre/doregist" onsubmit="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;
    }

猜你喜欢

转载自blog.csdn.net/qq_38595487/article/details/80815575