validate.chkMailExist = function(){
var email = $.trim($('#email').val());
//$('#chkMail').attr('disabled','disabled');
$.ajax({
url : '/reg/chkMailExist.php',
type : 'get',
data : {'email':email},
dataType : 'JSON',
async : false,
success : function(data){
var obj = eval('(' + data + ')');
if(typeof obj != 'object') return;
if(obj.status == 1){
$('#email').parents('td').next('td').find('.err').html('该email可以用于注册').css('color','green');
$('#chkMail').attr('disabled','');
return true
}else{
    $('#email').parents('td').next('td').find('.err').html('该email已经被用于注册').css('color','red');
$('#chkMail').attr('disabled','');
return false
}
}
})
alert('step2');
}
$('#email').blur(function(){validate.chkMailExist()})按照正常流程,这个是采用了ajax请求的同步方式,(async=false)。程序会等待ajax请求完成,然后通过回调函数跳出,不会往下执行(alert('step2')).但是实际情况是,程序执行到了alert('step2').这是因为什么呢?求详细解释,多谢!!

解决方案 »

  1.   

    同步是指,ajax 请求完成才执行后面的代码!function(data){
    var obj = eval('(' + data + ')');
    if(typeof obj != 'object') return;
    if(obj.status == 1){
    $('#email').parents('td').next('td').find('.err').html('该email可以用于注册').css('color','green');
    $('#chkMail').attr('disabled','');
    return true
    }else{
    $('#email').parents('td').next('td').find('.err').html('该email已经被用于注册').css('color','red');
    $('#chkMail').attr('disabled','');
    return false
    }
    }你的return,只跳出了这个函数!
    不会跳到函数
    validate.chkMailExist = function(){
    外面! 当然要执行了!
      

  2.   

    谢谢(老胡) 
    ,这个明白了。当时晕菜了。再请教一个问题if(!validate.checkMailExist()) return false;
    if(!validate.checkName()) return false;
    if(!validate.checkPwd()) return false;
    if(!validate.checkConPwd()) return false;
    if(!validate.checkRnd()) return false;
    其中validate.checkMailExist()利用了一个ajax的同步请求,奇怪的是后面的函数都得不到执行,这是为什么?多谢!
      

  3.   

    如果 validate.checkMailExist() 返回 true;
    肯定会执行下面的代码!你可以用firebug 调试一下
      

  4.   

     csdn真让人郁闷,结不了帖,连续两天了。结贴就报js错误