检查来自jquery的返回值失败

时间:2013-12-26 12:27:18

标签: javascript php jquery ajax

我使用jquery来验证表单,检查math-captcha,最后发送邮件。

验证工作正常,邮件工作正常。只有一个问题。当我的ajax返回false时,bool validCaptcha始终保持为true ...

$(document).ready(function() {    
$("#confirm").on("click", function(e) {
    e.preventDefault();        

    //Check name
    var validName = true;
    if ($("#name").val().length == 0) {
        $("#name").addClass('error');
        validName = false;
    }
    $("#name").change(function() {
        $("#name").removeClass('error');
    })
   //Check email
   var validEmail = true;
   if ($("#email").val().length == 0 || validateEmail($("#email").val()) != true) {
        $("#email").addClass('error');
        validEmail = false;
    }
    $("#email").change(function() {
        $("#email").removeClass('error');
    })
    //Check message
    var validMessage = true;
    if ($("#message").val().length == 0) {
         $("#message").addClass('error');
         validMessage = false;
     }
     $("#message").change(function() {
         $("#message").removeClass('error');
     })
   //Check captcha
   var validCaptcha = true;
   $.ajax({
        type: 'POST',           
        url: '../captcha/checkCaptcha.php',
        data: $("#mailform").serialize(),
        success: function(data) {                    
            var result = $.trim(data);
            if (result == 'false') {                    
                $("#inputcaptcha").addClass('error');
                validCaptcha = false;
            } else if (result == 'true') {
                $("#inputcaptcha").removeClass('error');
            }
        }
    });

    //Send email
    if (validName == true && validEmail == true && validMessage == true && validCaptcha == true) {
        $.ajax({
           type: 'POST',           
           url: '../sendMail.php',
           data: $("#mailform").serialize(),
           success: function(data) {                    
               var result = $.trim(data);
               if (result == 'true') {
                   $("#succesmessage").removeClass('hidden');
               }
               else if (result == 'false') {
                   $("#failmessage").removeClass('hidden');
               }
           }
       });
    } else {
        reloadCaptcha();
        $("#inputcaptcha").val("");
    }
});

});

在Firebug中,我看到我从checkCaptcha.php那里得到一个'假'回来,例如我留下了输入错误代码的字段。

checkCaptcha.php

session_start();
if ( !empty($_POST['inputcaptcha']) ) {
    if ( $_POST['inputcaptcha'] == $_SESSION['security_number'] )  {
        echo 'true';
    }
    else {
        echo 'false';
    }
}
else {
    echo 'false';
}

要检查我是否首先检查了captcha-ajax

中的结果值
alert(result) 
//returned false as it should when leaving blank or entering wrong value

然后在调用mail-ajax之前,我调用了所有bools

 alert('validName='+validName+' & validEmail='+validEmail+' & validMessage='+validMessage+' & validCaptcha='+validCaptcha);
//validCaptcha was true, even when result was false...

我什么都看不到?

1 个答案:

答案 0 :(得分:2)

简单地说,由于验证验证码是异步请求,因此无法执行此操作,

相反,您可以将电子邮件代码移至验证验证码成功处理程序,如

$(document).ready(function () {
    $("#confirm").on("click", function (e) {
        e.preventDefault();

        //Check name
        var validName = true;
        if ($("#name").val().length == 0) {
            $("#name").addClass('error');
            validName = false;
        }
        $("#name").change(function () {
            $("#name").removeClass('error');
        })
        //Check email
        var validEmail = true;
        if ($("#email").val().length == 0 || validateEmail($("#email").val()) != true) {
            $("#email").addClass('error');
            validEmail = false;
        }
        $("#email").change(function () {
            $("#email").removeClass('error');
        })
        //Check message
        var validMessage = true;
        if ($("#message").val().length == 0) {
            $("#message").addClass('error');
            validMessage = false;
        }
        $("#message").change(function () {
            $("#message").removeClass('error');
        })
        //Check captcha
        var validCaptcha = true;


        if (validName == true && validEmail == true && validMessage == true) {
            $.ajax({
                type: 'POST',
                url: '../captcha/checkCaptcha.php',
                data: $("#mailform").serialize(),
                success: function (data) {
                    var result = $.trim(data);
                    if (result == 'false') {
                        $("#inputcaptcha").addClass('error');
                    } else if (result == 'true') {
                        $("#inputcaptcha").removeClass('error');
                        $.ajax({
                            type: 'POST',
                            url: '../sendMail.php',
                            data: $("#mailform").serialize(),
                            success: function (data) {
                                var result = $.trim(data);
                                if (result == 'true') {
                                    $("#succesmessage").removeClass('hidden');
                                    reloadCaptcha();
                                    $("#inputcaptcha").val("");
                                } else if (result == 'false') {
                                    $("#failmessage").removeClass('hidden');
                                }
                            }
                        });
                    }
                }
            });
        }
    });
});