Jquery 根据ajax响应执行函数

Jquery 根据ajax响应执行函数,jquery,ajax,Jquery,Ajax,我有两个函数,它们被称为onBlur,用于在完成注册过程之前验证用户名或电子邮件是否已注册 这是两个函数 function checkname() { jQuery.ajax({ url: "includes/check_signup.php", data:'username='+$("#name").val(), type: "POST", success:function(data){ $("#e

我有两个函数,它们被称为onBlur,用于在完成注册过程之前验证用户名或电子邮件是否已注册

这是两个函数

function checkname() {
    jQuery.ajax({
        url: "includes/check_signup.php",
        data:'username='+$("#name").val(),
        type: "POST",
        success:function(data){
            $("#error").html(data);
        },
        error:function (){}
    });
}

function checkemail()
{
    jQuery.ajax({
        url: "includes/check_signup.php",
        data:'email='+$("#email").val(),
        type: "POST",
        success:function(data){
            $("#error").html(data);
        },
        error:function (){}
    });
}
我有第三个函数,它在按钮submit上执行,将用户数据发送到数据库。现在,如果上述任何函数返回“用户名/电子邮件已注册”的成功消息,我如何停止执行该函数

这是第三个功能

 $('#btn-signup').click(function(){
    $.post( 
        $('#register-form').attr('action'),
        $('#register-form :input').serializeArray(),
        function(result){
            $('#result').html(result);
        }
    );
});

使用信号量控制所需的通信量,假设您有一个DOM对象,其类为
result\u email
result\u name
,并且最初两者都包含.text()=“blocked”

如果任何一个调用成功,意味着用户名或电子邮件已经存在,我们打开信号量以阻止注册按钮单击事件,但是如果检查方法再次调用,并且失败,那么name或email可以注册,我们从信号量中移除该块

function checkemail() {
    jQuery.ajax({
        url: "includes/check_signup.php",
        data:'email='+$("#email").val(),
        type: "POST",
        success:function(data){
            $(".result_email").text("blocked")
            $("#error").html(data);
        },
        error:function (){
            $(".result_email").text("")
        }
    });
}

function checkname() {
    jQuery.ajax({
        url: "includes/check_signup.php",
        data:'username='+$("#name").val(),
        type: "POST",
        success:function(data){
            $(".result_name").text("blocked")
            $("#error").html(data);
        },
        error:function (){
            $(".result_name").text("")
        }
    });
}

您也可以在JS中使用全局变量,但最好在IMO中使用DOM元素。

您可以在字段的“onBlur”上或在提交之前进行两次字段检查,然后再添加用户

$("#name").on("blur",checkname); 
在checkName success中,还可以设置标志nameValid=true

你可以这样做

function checkname() {
    jQuery.ajax({
        url: "includes/check_signup.php",
        data:'username='+$("#name").val(),
        type: "POST",
        success:function(data){
            nameValid = false;
        },
        error:function (){
            nameValid = true;
        }
    });
}
同样,你也可以

$("#email").on("blur",checkemail); 
设置emailValid标志。当用户单击/输入值并退出字段时,通常使用on blur

在submit按钮上,您可以检查这两个标志并仅在这两个标志都为true时调用

$('#btn-signup').click(function() {
   if (nameValid && emailValid) { 
      if(!$(".result").text()) {
        $.post( 
            // etc
        );
     } else {
        $("#error").focus();
    }
   }
});

您还可以通过回调链接在提交时一起执行两个检查,在第一个检查成功时调用第二个检查,在第二个检查成功时调用提交。但这需要更长的等待时间,太多的嵌套回调(也称为回调地狱),最好的做法是在用户输入时立即给出内联用户反馈

这是全部代码:

确保ajax请求返回成功后替换代码。

我假设
0
的结果是它可用,否则它不可用

var isnameavable=false;
var isEmailAvailable=false;
函数checkname(){
jQuery.ajax({
url:“includes/check_signup.php”,
数据:“用户名=”+$(“#名称”).val(),
类型:“POST”,
成功:功能(数据){
$(“#错误”).html(数据);
if(parseInt(data)==0){
isnameavable=true;
}否则{
isnameavable=false;
}
},
错误:函数(){
日志(“连接错误”);
//仅供测试
控制台日志(“Demoooo”);
isnameavable=true;
}
});
}
函数checkemail(){
jQuery.ajax({
url:“includes/check_signup.php”,
数据:'email='+$(“#email”).val(),
类型:“POST”,
成功:功能(数据){
$(“#错误”).html(数据);
if(parseInt(data)==0){
isEmailAvailable=true;
}否则{
isEmailAvailable=false;
}
},
错误:函数(){
日志(“连接错误”);
//仅供测试
控制台日志(“Demoooo”);
isEmailAvailable=true;
}
});
}
$(“#btn注册”)。单击(函数(事件){
event.preventDefault();
如果(!isNameAvailable | |!isEmailAvailable){
控制台日志(“检查用户名和电子邮件”);
返回;
}
console.log(“成功…”);
美元邮政(
$(“#注册表形式”).attr('action'),
$(“#注册表形式:输入”).serializeArray(),
功能(结果){
$('#result').html(result);
}
);
});

用户名:
电邮:



如何设置标志nameValid=true?我添加了设置标志的逻辑。请检查不走运,它会在控制台中不断返回此错误
检查用户名和电子邮件
@RayanSp您是否尝试在
名称
电子邮件
字段中键入任何内容?您能否选择此问题的可接受答案?
$('#btn-signup').click(function() {
   if (nameValid && emailValid) { 
      if(!$(".result").text()) {
        $.post( 
            // etc
        );
     } else {
        $("#error").focus();
    }
   }
});