对另一个函数的响应执行ajax调用但不工作

时间:2013-09-06 05:42:55

标签: ajax jquery

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

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

首先是验证表格。

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 个答案:

答案 0 :(得分:0)

validateregForm()函数的第一行出错

更改

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

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

                    ^ `.val()` here.

答案 1 :(得分:0)

您需要了解异步和同步概念。 Ajax调用通常是异步的。简单地将参数async设置为每个ajax请求的false,您将得到结果。来自documentation

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().

答案 2 :(得分: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');
            }
        });
    }
});

答案 3 :(得分: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成功部分成功完成用户创建。它会正常工作