繁体   English   中英

无法从jquery中的函数返回ajax responseText

[英]Can not return ajax responseText from a function in jquery

我有一个表格供用户注册新帐户。 我使用jquery + ajax来检查电子邮件地址是否模糊。 在Jquery代码中,我使用了e.preventDefault();。 防止在出现任何错误时提交表单。 我尝试了电子邮件输入中的现有电子邮件地址,然后单击提交表单。 它允许表单提交。 它不应该这样做,因为ajax reponseText返回false。 请任何人告诉我该如何修改此代码才能正常工作? 我也阅读了类似的文章 ,我尝试过但仍然无法正常工作。 请帮助我指出我需要修复当前代码吗?

这是我的表格:

<form role="form" method="post" id="signupForm" action="index.php?view=signup-gv">
                <div class="col-xs-6 border-right">
                    <div class="form-group">
                        <label for="exampleInputEmail1">Full Name</label>
                        <input type="text" class="form-control" id="regname" name="regname" placeholder="Full Name">
                    </div>
                    <div class="form-group">
                        <label for="exampleInputEmail1">Email Address</label><span id="emailcheck"></span>
                        <input type="email" class="form-control" id="regemail" name="regemail" placeholder="Enter email">
                    </div>
                </div>
                <div class="form-group col-xs-6">
                    <label for="exampleInputPassword1">Password</label>
                    <input type="password" class="form-control" id="regpass" name="regpass" placeholder="Password">
                </div>
                <button style="position:relative; left: 15px; top: 10px;" class="btn btn-default" name="register" id="register">Register</button>
            </form>

这是我的jQuery代码:

$(document).ready(function(){
$('#regname').focus(); 
$('#regemail').blur(emailCheck);
$('#signupForm').submit(function(e) {
var regname = $('#regname'); 
var regemail = $('#regemail'); 
var regpass = $('#regpass'); 
var register_result = $('#register_result'); 
register_result.html('Loading..'); 
if(regname.val() == ''){ 
    regname.focus();
    register_result.html('<span class="errorss"> * Full name can not be blank</span>');
    e.preventDefault();
}
else if ($.trim(regemail.val()).length == 0) {
    regemail.focus(); 
    register_result.html('<span class="errorss">* Email address can not be blank</span>');
    e.preventDefault();
}
 else if (emailCheck()==false) {
    regemail.focus(); 
    register_result.html('<span class="errorss"> This email address is already existed. Please choose another one </span>');
    e.preventDefault();
}
else if(regpass.val() == ''){ 
    regpass.focus();
    register_result.html('<span class="errorss">* Password can not be blank</span>');
    e.preventDefault();
}

});
});
function emailCheck() {
var regemail = $('#regemail'); 
var emailcheck = $('#emailcheck');
emailcheck.html(''); 
var UrlToPass = {regemail:regemail.val()} ;
    $.ajax({ 
    type : 'POST',
    cache: false,
    data : UrlToPass,
    url  : 'emailcheck.php',
    success: function(responseText){ 
        if(responseText == 0){
            return true;
        }
        else{
            emailcheck.html('<span class="errorss"> This email is existed.</span>');
            return false;
        }
    }
    });
}

因此,问题是:您正在尝试从异步函数返回。 当您尝试在success回调函数中返回“ true”或“ false”时,您的函数emailCheck已经结束,没有返回任何内容。

因此,当您声明一个函数submit ,您应该意识到,只有在返回ajax调用之后,您才能进一步进行提交。 我建议您始终从submit返回false,然后,仅在回调内部决定是否提交代码。 所以在这里,您可能会这样:

$('#signupForm').submit(function(e) {
    var regname = $('#regname'); 
    var regemail = $('#regemail'); 
    var regpass = $('#regpass'); 
    var register_result = $('#register_result'); 
    register_result.html('Loading..'); 
    if(regname.val() == ''){ 
        regname.focus();
        register_result.html('<span class="errorss"> * Full name can not be blank</span>');
        return false;
    } else if ($.trim(regemail.val()).length == 0) {
        regemail.focus(); 
        register_result.html('<span class="errorss">* Email address can not be blank</span>');
        return false;
    } else if(regpass.val() == ''){ 
        regpass.focus();
        register_result.html('<span class="errorss">* Password can not be blank</span>');
        return false;
    }

    emailCheck().done(function(r){
        if(r){
            $('#regemail').focus(); 
            $('#register_result').html('<span class="errorss"> This email address is already existed. Please choose another one </span>');
            //Reseting to submit bind to not call function again
            $('#signupForm').submit(function(){});
            $('#signupForm').submit();
        }
    }).fail(function(r){
        // Do something if fail.
    });

    return false

});

这只是解决您的问题的方法 对于更优雅的解决方案,您应该再次检查您提到的链接: 如何从异步调用返回响应? 特别是在答案中,“ 改善错误代码 ”部分

您应该进行的另一项修复,您应该在回调函数中使用相同的选择器再次选择“ span”。 因此,请执行以下操作:

$('#emailcheck').html('<span class="errorss"> This email is existed.</span>');

代替这个:

emailcheck.html('<span class="errorss"> This email is existed.</span>');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM