ajax返回函数值的问题

时间:2011-05-15 07:45:28

标签: jquery

我正在尝试将ajax请求中的值返回到表单提交上的函数。

代码如下:

function validateEmail(){ 
        if(email.val() == "")
        {
            $("#emailerror").html("Enter Email...");
            return false;
        }
        else {
        $.ajax({
            type: "POST",
            data: "email="+email.val(),
            url:'emailcheck.php',
            beforeSend: function(){
                $("#emailerror").html("Checking Email...");
            },
            success: function(data){
                if(data == "invalid")
                {
                    $("#emailerror").html("Invalid Email");
                    return false;
                }
                else if(data != "0")
                {
                    $("#emailerror").html("Email Already Exist");
                    return false;
                }
                else
                {
                    $("#emailerror").html("OK");
                    return true;
                }
            }
        });
        }
    }

在表单提交时,我正在调用该函数并检查来自ajax响应的返回值:

$('#myForm').submit(function(){
        if(validateEmail())
        {
            alert('returning true');
            return true;
        }
        else
        {
            return false;
        }
});

但是,当返回值为“真实”时,代码不会被执行。函数validateEmail()返回false。

请帮我弄清楚我哪里出错..

提前致谢。

3 个答案:

答案 0 :(得分:0)

if(data == "invalid")
            { // id data = invalid it good
                $("#emailerror").html("Invalid Email");
                return false;
            }
            else if(data != "0") //if data == good it work :) it is error
            {
                $("#emailerror").html("Email Already Exist");
                return false;
            }
            else
            {
                $("#emailerror").html("OK");
                return true;
            }

也许是这样的:

if(data == "invalid")
            { // id data = invalid it good
                $("#emailerror").html("Invalid Email");
                return false;
            }
            else if(data == "good") //if data == good it work :) it is error
            {
                $("#emailerror").html("OK");
                return true;
            }
            else
            {
                $("#emailerror").html("Email Already Exist");
                return false;
            }

答案 1 :(得分:0)

AJAX中的“A”代表“异步”。

else的{​​{1}}分支中,您正在向validateEmail发起异步请求。 emailcheck.php将在之前返回您的PHP文件响应;然后你的validateEmail脚本会响应,jQuery会调用你的emailcheck.php回调,但没有人会注意它返回的内容。就表单验证而言,结果是success看起来像这样:

validateEmail

您可以尝试$.ajaxfunction validateEmail() { if(email.val() == "") { $("#emailerror").html("Enter Email..."); return false; } else { // Your $.ajax() might as well not even be here as // validateEmail will return before $.ajax() gets a // response from emailcheck.php return; } } 选项,或者重写所有逻辑,以便能够等待异步请求返回。

此外,async:false的第二个分支不会返回validateEmail,它根本不会返回任何内容,但仍然不是真正的值。

答案 2 :(得分:0)

我认为问题在于,您在调用validateEmail()时将未定义为返回值。 这是因为您的ajax请求是异步完成的,并且validateEmail()函数在获得结果之前退出。一个解决方案(我认为不好)是在ajax请求中将选项async设置为false。

$.ajax({
        type: "POST",
        data: "email="+email.val(),
        url:'emailcheck.php',
        async: false,
        beforeSend: function(){
            $("#emailerror").html("Checking Email...");
        }

否则我会推荐这个。无论触发你的提交电话,你都可以触发validateEmail(),然后从那里调用提交。

validateEmail(); //Instead of trigger submit you call this function.    

function validateEmail(){ 
    if(email.val() == "")
    {
        $("#emailerror").html("Enter Email...");
        return false;
    }
    else {
    $.ajax({
        type: "POST",
        data: "email="+email.val(),
        url:'emailcheck.php',
        beforeSend: function(){
            $("#emailerror").html("Checking Email...");
        },
        success: function(data){
            if(data == "invalid")
            {
                $("#emailerror").html("Invalid Email");
                return false;
            }
            else if(data != "0")
            {
                $("#emailerror").html("Email Already Exist");
                return false;
            }
            else
            {
                $("#emailerror").html("OK");
                $('#myForm').submit(); //Here you trigger submit.
                return true;
            }
        }
    });
    }
}

可能你有其他验证功能,但我认为你也可以管理它。