我不知道为什么同样的价值不正确

时间:2015-11-24 10:53:12

标签: javascript jquery

function checkEmailValid(email,result)
    {
        if(email.val()==""){
            result.text("이메일을 입력하십시요.");
            return false;
        }
        else{
            var re_mail = /^([\w\.-]+)@([a-z\d\.-]+)\.([a-z\.]{2,6})$/;
            if(re_mail.test(email.val())){
                var res = false;
                $.ajax({
                    type:"GET",
                    url: "http://127.0.0.1:3000/auth/checkemail/"+email.val(),
                    timeout: 2000,
                    beforeSend: function(){
                        result.text("이메일 확인 중...");
                    },
                    complete: function(jqXHR){
                        if(jqXHR.status==202){
                            res = true;

                        }else{
                            result.text("이미 등록된 이메일입니다.");
                            res = false;    
                        }
                    },
                    success:function(data,textStatus,jqXHR){

                    },
                    fail: function(){

                    }                       
                });
                alert("step2 : " + res); ////////Here is Step2!!!
                alert("step3 : " + res); ///////Here is Step3!!!
                return res;

            }else{
                result.text("이메일 형식이 올바르지 않습니다.");
                return false;   
            }
        }
    }

以上功能适用于电子邮件验证:

如果电子邮件有效,该函数将返回true,但奇怪的是,step2的res为false,step3的res为true。发生了什么事?

第2步值:

enter image description here

第3步值:

enter image description here

1 个答案:

答案 0 :(得分:0)

我不会建议您设置" async"为假 因为这是一种不好的做法,但您可以使用回调函数在真实条件下执行任务

我会解释

首先在你的函数中添加另一个参数,如

function checkEmailValid(email,result,SuccessCallback)

并创建一个函数,当ajax返回true时将执行您的任务

喜欢

function EmailIdIsUnique()
{
    //perform your code here
}

并在ajax中调用此回调函数

喜欢

complete: function(jqXHR){
                        if(jqXHR.status==202){
                         //run your code here 
                          if ($.isFunction(SuccessCallback))
                          {
                            result = successcallback.call(this);                        
                          }
                        }else{
                            result.text("이미 등록된 이메일입니다.");
                            res = false;    
                        }
                    },