return true / false在ajax代码中不起作用

时间:2013-03-08 06:26:45

标签: php javascript ajax

我正在检查来自数据库的重复电子邮件。首先,我检查了有效的电子邮件然后检查了电子邮件长度,然后我使用ajax从数据库检查所以返回true或返回false不能在ajax code.other验证是正常的,但检查重复的电子邮件是行不通的。 ajax响应也可以。
这里是我的js文件 -

$(document).ready(function(){

var form = $("#form");
var registeremail = $("#registeremail");
var emailInfo = $("#emailInfo");

registeremail.blur(validateEmail);
registeremail.keyup(validateEmail);


form.submit(function(){
    if(  validateEmail() )
        return true;
    else
        return false;

});


function validateEmail(){
    //testing regular expression
    var a = $("#registeremail").val();
    var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
    //if it's valid email

    if(filter.test(a)){
        registeremail.removeClass("error");
         emailInfo.text("");
        emailInfo.removeClass("error");
        if(registeremail.val().length < 8){
            registeremail.addClass("error");
            emailInfo.text("Min 8 letters required.");
            emailInfo.addClass("error");
            return false;
        }
        else if(registeremail.val().length > 60){
            registeremail.addClass("error");
            emailInfo.text("Max 60 letters required.");
            emailInfo.addClass("error");
            return false;
        }
        else
            { 
            $.ajax({
                  url: "home/CheckEmail",
                  data: {
                      email: a
                  },
                  success: function(ret)
                  {
                    if(ret=='1')
                    {
                        registeremail.addClass("error");
                        emailInfo.text("Email already exist.");
                        emailInfo.addClass("error");
                        return false;
                    }
                    else if(ret != '1')
                    {
                          registeremail.removeClass("error");
                          emailInfo.text("");
                          emailInfo.removeClass("error");

                          //document.forms["form"].submit();
                         return true; 
                    }
                  }
            });
            }
    }
    //if it's NOT valid
    else{
        registeremail.addClass("error");
        emailInfo.text("Valid e-mail please");
        emailInfo.addClass("error");
        return false;
    }
}

});

1 个答案:

答案 0 :(得分:1)

默认情况下,jQuery的ajax调用将异步运行。

因此,当您执行ajax调用时,成功或错误回调不会立即运行。

要使上述代码可用,可以在ajax调用参数中添加“async:false”。

但是进行同步ajax调用会冻结UI直到完成。如果后端api调用需要很长时间才能完成,那么这将成为一个显示阻止。

理想的方式是

  1. 显示一些处理/加载图标
  2. 发送AJAX电话
  3. 获得回复后,隐藏处理/加载图标
  4. 根据回复,显示错误/成功消息。