1

我有注册表,我在 jquery 中创建了三个函数第一个是验证表单。第二个是使用 ajax 请求检查电子邮件的唯一性。第三个是使用 ajax 请求创建用户。

我提交事件的流程是,首先我调用验证函数,然后在该函数的响应上,我调用该函数来检查该响应的电子邮件唯一性,一个 ajax 请求已完成以创建用户。

第一个是验证表单。

function validateregForm()
{   

if($('#u_name').val()=="" || !IsEmail($('#u_email').val()) || $('#u_pwd').val().length<6 || $('#c_pwd').val()!=$('#u_pwd').val())
{   
    if($('#u_name').val()=="")
    {
        $('#reg_error1').show();    
    }
    if(!IsEmail($('#u_email').val()))
    {
        $('#email_msg').remove();
        $('#reg_error2').show();
    }
    if($('#u_pwd').val().length<6)
    {
        $('#reg_error3').show();
    }
    if($('#u_pwd').val()!=$('#c_pwd').val())
    {
        $('#reg_error4').show();
    }
    return false;

}
else
{
    return true ;
}

第二个是使用 ajax 请求检查电子邮件的唯一性。

function chkmail(email)             {
var posting=$.post('http://localhost/tv100.info/index.php/user/chkmail',{u_email:$('#u_email').val()});
posting.done(function(data){
if(data=='success')
    {
        $('#email_error').css('display','none');
        $('#email_msg').css('display','block');
        return true;
    }
    if(data=='failure')
    {
        $('#email_msg').css('display','none');
        $('#email_error').css('display','block');
        return false;
    }
});

}

第三个是使用 ajax 请求创建用户。

$('#regform').submit(function(event)    {

var res=validateregForm()
event.preventDefault();
if(res)
{
    var email=chkmail();
}
if(email)
{
    $('#loading2').show();
var posting=$.post('http://localhost/tv100.info/index.php/user/create_user',$("#regform").serialize());
posting.done(function(data)
    {
    $('#loading2').hide();
     if(data=="success")
        {

        $('#reg_panel').append('<span id="reg_msg">Registration successful Now You are logged IN</span>');  
        $('#overlay').fadeOut(300);
        $('#login').html('Logout');
        $('#sign_in').hide();
        $('#cmmnt_field').show();
        }
    if(data=="failure")
        {
        $('#reg_panel').append('<span id="res_msg">Something Went Wrong try again  Latter</span>'); 
        }
    });
}
});
4

4 回答 4

0

只讲案情

if(res)
{
    var email=chkmail(); // for getting the result in var email, ajax will wait until the success 
}
if(email) // In your case before completing the ajax request, javascript come to this line and won't return true. So it it always go to else part. 

您可以在 chkmail 成功部分成功时创建用户。它会正常工作

于 2013-09-06T06:06:06.977 回答
0

validateregForm() 函数的第一行出错,

改变

if($('#u_name').val=="" || !IsEmail($('#u_email').val()) 

if($('#u_name').val() =="" || !IsEmail($('#u_email').val())

                    ^ `.val()` here.
于 2013-09-06T05:50:56.180 回答
0

您需要了解异步和同步的概念。Ajax 调用通常是异步的。只需将每个 ajax 请求的参数设置async为 false,您就会得到结果。从文档

async (default: true)
Type: Boolean
By default, all requests are sent asynchronously (i.e. this is set to true by default).
If you need synchronous requests, set this option to false.
Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation.
Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.
As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().
于 2013-09-06T05:54:01.290 回答
0

您需要使用回调来处理电子邮件验证的结果

function chkmail(email, callback) {
    var posting = $.post('http://localhost/tv100.info/index.php/user/chkmail', {
        u_email : email
    });
    posting.done(function(data) {
        if (data == 'success') {
            callback(true);
        } else if (data == 'failure') {
            callback(false);
        }

    });

}

$('#regform').submit(function(event) {

    var res = validateregForm()
    event.preventDefault();
    if (res) {
        chkmail($('#u_email').val(), function(valid) {
            if (valid) {
                $('#email_error').css('display', 'none');
                $('#email_msg').css('display', 'block');
                $('#loading2').show();
                var posting = $.post('http://localhost/tv100.info/index.php/user/create_user', $("#regform").serialize());
                posting.done(function(data) {
                    $('#loading2').hide();
                    if (data == "success") {
                        $('#reg_panel').append('<span id="reg_msg">Registration successful Now You are logged IN</span>');
                        $('#overlay').fadeOut(300);
                        $('#login').html('Logout');
                        $('#sign_in').hide();
                        $('#cmmnt_field').show();
                    }
                    if (data == "failure") {
                        $('#reg_panel').append('<span id="res_msg">Something Went Wrong try again  Latter</span>');
                    }
                });
            } else {
                $('#email_msg').css('display', 'none');
                $('#email_error').css('display', 'block');
            }
        });
    }
});
于 2013-09-06T05:54:18.487 回答