Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法获取对函数的ajax回调_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 无法获取对函数的ajax回调

Javascript 无法获取对函数的ajax回调,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个表格供用户注册新帐户。我使用jquery+ajax检查表单提交时电子邮件地址的可用性。在Jquery代码中,我使用了e.preventDefault();如果出现任何错误,则阻止表单提交。我尝试了电子邮件输入中的现有电子邮件地址,然后单击提交表单。它允许表单提交。它不应该这样做,因为ajax reponseText返回true意味着数据库中已经存在电子邮件地址 谁能告诉我如何修复我的代码,这样如果ajax响应返回true,它将阻止表单提交并显示错误 我试着阅读和跟随,但在多次尝试后失败了

我有一个表格供用户注册新帐户。我使用jquery+ajax检查表单提交时电子邮件地址的可用性。在Jquery代码中,我使用了e.preventDefault();如果出现任何错误,则阻止表单提交。我尝试了电子邮件输入中的现有电子邮件地址,然后单击提交表单。它允许表单提交。它不应该这样做,因为ajax reponseText返回true意味着数据库中已经存在电子邮件地址

谁能告诉我如何修复我的代码,这样如果ajax响应返回true,它将阻止表单提交并显示错误

我试着阅读和跟随,但在多次尝试后失败了

这是我的表格:

<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(); 
$('#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(regpass.val() == ''){ 
    regpass.focus();
    register_result.html('<span class="errorss">* Password can not be blank</span>');
    e.preventDefault();
}
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>');
        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 false; // good to go
        }
        else{
            emailcheck.html('<span class="errorss"> This email is existed.</span>');
            return true; // This email is registered. Please try different one
        }
    }
    });
$(文档).ready(函数(){
$('#regname').focus();
$(“#注册表”).submit(函数(e){
var regname=$('#regname');
var regemail=$(“#regemail”);
var regpass=$(“#regpass”);
var register_result=$(“#register_result”);
register_result.html('load..');
如果(regname.val()=''){
regname.focus();
register_result.html(“*全名不能为空”);
e、 预防默认值();
}
else if($.trim(regemail.val()).length==0){
regemail.focus();
register_result.html(“*电子邮件地址不能为空”);
e、 预防默认值();
}
如果(regpass.val()=''){
regpass.focus();
register_result.html(“*密码不能为空”);
e、 预防默认值();
}
emailCheck().done(函数(r){
if(r){
$('#regemail').focus();
$('#register_result').html('此电子邮件地址已存在。请选择另一个');
e、 预防默认值();
}
}); 
});
});
函数emailCheck(){
var regemail=$(“#regemail”);
var emailcheck=$(“#emailcheck”);
emailcheck.html(“”);
var UrlToPass={regemail:regemail.val()};
$.ajax({
键入:“POST”,
cache:false,
数据:UrlToPass,
url:'emailcheck.php',
成功:函数(responseText){
if(responseText==0){
return false;//很好
}
否则{
emailcheck.html('此电子邮件已存在');
return true;//此电子邮件已注册。请尝试其他电子邮件
}
}
});

}

您将自己与同步和异步功能混淆。ajax函数进行异步调用并在其回调中返回输出。您正在尝试将异步函数包装到普通函数中,并期望它同步运行

函数在Ajax调用接收其输出之前返回。使用

异步:false

$.ajax({ 
    type : 'POST',
    cache: false,
     async: false,
    data : UrlToPass,
有关详细信息,请参阅以下内容:


首先,您没有从emailCheck()函数返回任何内容,但您使用它时,就像它返回承诺对象一样

所以

$(文档).ready(函数(){
$('#regname').focus();
$(“#注册表”).submit(函数(e){
var regname=$('#regname');
var regemail=$(“#regemail”);
var regpass=$(“#regpass”);
var register_result=$(“#register_result”);
register_result.html('load..');
//阻止表单提交
e、 预防默认值();
如果(regname.val()=''){
regname.focus();
register_result.html(“*全名不能为空”);
}else if($.trim(regemail.val()).length==0){
regemail.focus();
register_result.html(“*电子邮件地址不能为空”);
}else if(regpass.val()=''){
regpass.focus();
register_result.html(“*密码不能为空”);
}否则{
emailCheck().done(函数(r){
if(r){
$('#regemail').focus();
$('#register_result').html('此电子邮件地址已存在。请选择另一个');
}否则{
$(“#注册表单”)[0]。提交();
}
});
}
});
});
函数emailCheck(){
var regemail=$(“#regemail”);
var emailcheck=$(“#emailcheck”);
emailcheck.html(“”);
var UrlToPass={
regemail:regemail.val()
};
var deferred=jQuery.deferred();
$.ajax({
键入:“POST”,
cache:false,
数据:UrlToPass,
url:'emailcheck.php',
成功:函数(responseText){
if(responseText==0){
延迟。解决(错误);
}否则{
emailcheck.html('此电子邮件已存在');
延迟。解决(正确);
}
},
错误:函数(){
拒绝();
}
});
延迟返回。承诺();
}

使用return false,使用preventDefault()尝试了这个方法,但我仍然理解异步和同步。这就是为什么我尝试本文中的解决方案:。但从技术上来说,我不知道我所做的是否正确?所以,如果你发现这是一个愚蠢的错误,请指出它,并请如何修复它为我的情况。非常感谢您在emailcheck中的ajax调用中设置您的async:falsefunction@AbhisekMalakar为什么会有人这样做?我从firebug得到这个错误:TypeError:deferred.pomise不是函数?@GiangNguyen a typo
return deferred.promise()$(document).ready(function () {
    $('#regname').focus();
    $('#signupForm').submit(function (e) {
        var regname = $('#regname');
        var regemail = $('#regemail');
        var regpass = $('#regpass');
        var register_result = $('#register_result');
        register_result.html('Loading..');
        //prevent the form submit
        e.preventDefault();

        if (regname.val() == '') {
            regname.focus();
            register_result.html('<span class="errorss"> * Full name can not be blank</span>');
        } else if ($.trim(regemail.val()).length == 0) {
            regemail.focus();
            register_result.html('<span class="errorss">* Email address can not be blank</span>');
        } else if (regpass.val() == '') {
            regpass.focus();
            register_result.html('<span class="errorss">* Password can not be blank</span>');
        } else {
            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>');
                } else {
                    $('#signupForm')[0].submit();
                }
            });
        }
    });
});

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