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

时间:2016-06-21 16:29:20

标签: jquery ajax forms

我有一个返回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;
                }
            }
        });
    }
}

当我按下ESC并通过控制台检查网络时,我发现ajax请求返回'存在'并且“用户存在”的警告被触发但是表单在提交时不提交

enter image description here

1 个答案:

答案 0 :(得分: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;
}