Javascript JQuery Ajax PHP验证注册

Javascript JQuery Ajax PHP验证注册,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我目前正在尝试使用Jquery验证我的注册表单,Jquery在用户提交表单后运行 我有以下jquery函数: $('#signupForm').submit(function() { if($('#email').val() == "" || $('#password').val() == "" || $('#repassword').val() == "" ){ alert('empty form'); ret

我目前正在尝试使用Jquery验证我的注册表单,Jquery在用户提交表单后运行

我有以下jquery函数:

$('#signupForm').submit(function() {

    if($('#email').val() == "" || 
        $('#password').val() == "" ||
        $('#repassword').val() == "" ){
            alert('empty form');
        return false;
    }

    if($('#password').val() != $('#repassword').val()){
        alert('password does not match');
        return false;
    }

    //check if email is available
    var isemailavailable = true;
    $.ajax({
        url: "php_includes/registerlogic.php",
        type: "POST",
        data: {checkemail: $('#email').val()},
        dataType: 'json',
    }).done(function(data){

            var resultObject = $.parseJSON(JSON.stringify(data));
            //alert(data);
            console.log(resultObject.data);
        if(resultObject.data=='taken') {

                //return false;
                console.log('inside taken');
                isemailavailable = false;
                console.log(isemailavailable);
            }else{
                alert($.trim(data));
                isemailavailable = true;
            }
    });

    if(isemailavailable == false){
        alert("email already exists!");
        return false;
    }
});
$.ajax({
    url: "php_includes/registerlogic.php",
    type: "POST",
    data: {checkemail: $('#email').val()},
    dataType: 'json',
}).done(function(data){

        var resultObject = $.parseJSON(JSON.stringify(data));
        //alert(data);
        console.log(resultObject.data);
        if(resultObject.data=='taken') {

            //return false;
            console.log('inside taken');
            isemailavailable = false;
            console.log(isemailavailable);
        }else{
            alert($.trim(data));
            isemailavailable = true;
        }


        if(isemailavailable == false){
          alert("email already exists!");
          //return false;
        }

});
Ajax点击此页面查看电子邮件可用性:

if(isset($_POST["checkemail"])){
$email = preg_replace('#[^a-z0-9]#i', '', $_POST['checkemail']);
$query = $db->query('SELECT * FROM users WHERE user_email= :email LIMIT 1', array(':email'=>$_POST['checkemail']));

$isavailable = "";
if(count($query) < 1){
    $isavailable = 'available';
}else{
    $isavailable = 'taken';
}

$respond = array("data" => $isavailable);
$out = json_encode($respond);
echo $out;
exit();
}

好的,我这里的问题是Jquery,在我得到ifisemailavailable==false部分之前,一切都正常。即使isemailavailable为false,代码也不会进入。因此,表单将作为返回false在if语句中提交。我也试过如果!我可以用,但效果不好

非常感谢您的任何帮助或建议。 谢谢你的问题是if语句在ajax请求完成之前运行

您应该将该代码块移动到.done函数中:

$('#signupForm').submit(function() {

    if($('#email').val() == "" || 
        $('#password').val() == "" ||
        $('#repassword').val() == "" ){
            alert('empty form');
        return false;
    }

    if($('#password').val() != $('#repassword').val()){
        alert('password does not match');
        return false;
    }

    //check if email is available
    var isemailavailable = true;
    $.ajax({
        url: "php_includes/registerlogic.php",
        type: "POST",
        data: {checkemail: $('#email').val()},
        dataType: 'json',
    }).done(function(data){

            var resultObject = $.parseJSON(JSON.stringify(data));
            //alert(data);
            console.log(resultObject.data);
        if(resultObject.data=='taken') {

                //return false;
                console.log('inside taken');
                isemailavailable = false;
                console.log(isemailavailable);
            }else{
                alert($.trim(data));
                isemailavailable = true;
            }
    });

    if(isemailavailable == false){
        alert("email already exists!");
        return false;
    }
});
$.ajax({
    url: "php_includes/registerlogic.php",
    type: "POST",
    data: {checkemail: $('#email').val()},
    dataType: 'json',
}).done(function(data){

        var resultObject = $.parseJSON(JSON.stringify(data));
        //alert(data);
        console.log(resultObject.data);
        if(resultObject.data=='taken') {

            //return false;
            console.log('inside taken');
            isemailavailable = false;
            console.log(isemailavailable);
        }else{
            alert($.trim(data));
            isemailavailable = true;
        }


        if(isemailavailable == false){
          alert("email already exists!");
          //return false;
        }

});
虽然在处理函数中的所有内容时不需要额外的

返回false也不会执行您期望它在那里执行的操作,因此也没有必要这样做

您可能应该在电子邮件字段失去焦点时立即对其运行验证,并在其无效时禁用“提交”按钮

另一种方法是将async设置为false以获取同步ajax请求:

$.ajax({
    url: "php_includes/registerlogic.php",
    type: "POST",
    data: {checkemail: $('#email').val()},
    dataType: 'json',
    async: false
}).done(function(data){

但就我个人而言,我会在字段失去焦点后立即/尽快进行电子邮件验证。

您好,谢谢您的帮助。是的,这确实给了我alertemail已经存在,这意味着它现在正在工作,但返回false并没有阻止表单提交。知道这是为什么吗?似乎return false在ajax中不起作用done@user3170763我只是在我的答案末尾加了一些关于这个的东西。哦,是的,很抱歉刚才看到了。好的,我将在它失去对一个单独函数的关注后尝试验证。非常感谢你的帮助