ajax调用在返回false和表单提交后返回true

jq *_*ner 0 forms ajax jquery

我有一个返回true或false以通过ajax提交表单的函数

<form method="post" onsubmit="return validate()">
  <input type="text" name="user" id="user">
</form>

function validate(){
  var n = $("#user").val();
  if(n.length<2){           
        return false;
    }
    else{
        $.ajax({
            url: 'ajax/checkuser.php',
            global: false,
            type: 'POST',
            data: {user:n},
            async: false, //blocks window close
            success: function(data) {
                if(data.trim().indexOf('exists')>-1){
                    alert('user exists);
                    return false;
                }
                else if(data.trim().indexOf('ok')>-1){
                    return true;
                }
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

当我按ESC并通过控制台检查Net时,我发现ajax请求返回“ exists”,并且“用户存在”的警报被触发,但是该表单已提交但不应提交

在此处输入图片说明

小智 5

现在它不起作用,因为您没有将false响应返回到表单,而是返回了ajax成功回调。

请尝试更新的以下代码段:

<form method="post" onsubmit="return validate()">
  <input type="text" name="user" id="user">
</form>

function validate(){
  var retValue = false;
  var n = $("#user").val();
  if(n.length<2){           
        retValue = false;
    }
    else{
        $.ajax({
            url: 'ajax/checkuser.php',
            global: false,
            type: 'POST',
            data: {user:n},
            async: false, //blocks window close
            success: function(data) {
                if(data.trim().indexOf('exists')>-1){
                    alert('user exists);
                    retValue = false;
                }
                else if(data.trim().indexOf('ok')>-1){
                    retValue = true;
                }
            }
        });
    }
return retValue;
}
Run Code Online (Sandbox Code Playgroud)