JQuery ajax post函数在javascript结束时执行

JQuery ajax post函数在javascript结束时执行,javascript,jquery,ajax,post,Javascript,Jquery,Ajax,Post,我在验证用户名是否已被使用时遇到问题。我试图使用jquery的“post”方法来确定用户名是否已经存在。但在执行此函数时,脚本总是跳到函数的末尾,并在执行“post”命令之前先执行脚本的其余部分。你能检查一下我的代码并帮我吗 $(“#提交”)。单击(函数(){ var username=document.getElementById(“用户名”).value; var email=document.getElementById(“email”).value; var passwort=docu

我在验证用户名是否已被使用时遇到问题。我试图使用jquery的“post”方法来确定用户名是否已经存在。但在执行此函数时,脚本总是跳到函数的末尾,并在执行“post”命令之前先执行脚本的其余部分。你能检查一下我的代码并帮我吗

$(“#提交”)。单击(函数(){
var username=document.getElementById(“用户名”).value;
var email=document.getElementById(“email”).value;
var passwort=document.getElementById(“passwort”).value;
var passwort2=document.getElementById(“passwort2”).value;
var=false;
checkUsername();
if(validate==true){
$.post(“Login/register.php”{
用户名:用户名,
电邮:电邮,,
蒲草,蒲草,
passwort2:passwort2,
},功能(信息){
$(“#errorBox”).empty();
$(“#errorBox”).html(信息);
});
}否则{
$('#register')。提交(函数(){
返回false;
});
}
函数checkUsername(){
用户名=document.getElementById(“用户名”).value;
//用户名=replaceUmlauts(用户名);
如果(username.length>0){
document.getElementById(“用户名”).style.borderColor=“”;
//document.getElementById(“errorBox”).innerHTML=
// "";
验证=真;
检查可用性();
返回false;
}否则{
document.getElementById(“用户名”).style.borderColor=“红色”;
document.getElementById(“errorBox”).innerHTML=“用户名muss länger als ein Zeichen sein”;
//警报('用户名必须超过一个符号');
验证=假;
返回false;
}
}
功能检查可用性(){
美元邮政(
“Login/checkusername.php”{
用户名:username
},
功能(结果){
//如果结果是1
如果(结果==1){
//显示用户名为
//可用
文件
.getElementById(“errorBox”).innerHTML=“”;
返回false;
}否则{
//显示用户名不是
//可用
文件
.getElementById(“errorBox”).innerHTML=“用户名nicht verfuegbar”;
文件
.getElementById(“用户名”).style.borderColor=“红色”;
验证=假;
返回false;
}
});
}
返回false;

});您的变量
validate
存在范围问题,我建议您在函数
checkUsername()
中这样做:

,这在您的函数中
checkAvailability()

var validate=checkUsername()在主函数中的if语句之前


编辑:这段代码是脏的,你应该选择使用“老式JS”,比如
document.getElementById
,或者jQuery(例如:
$(“#myId”)
),但是不建议同时使用这两种方法,我没有足够的时间来清理它,但这将是一个好的开始。请注意,我使用了
$.post(“/echo/html/”,{
仅用于演示目的,并对实际行进行了注释,因为它无法在小提琴中工作。请修改代码以满足您的需要

演示@

$(“#注册”)。在(“提交”功能上(evt){
evt.preventDefault();
var$username=$(“#username”);
var email=$.trim($(“#email”).val();
var passwort=$.trim($(“#passwort”).val();
var passwort2=$.trim($(“#passwort2”).val();
var$errorBox=$(“#errorBox”);
var isUser=checkUsername();
if(isUser){
检查可用性();
}
函数checkUsername(){
var usernameVal=$.trim($username.val());
如果(usernameVal.length>0){
$username.css({borderColor:“none”});
返回true;
}否则{
$username.css({borderColor:“red”});
$errorBox.html(“用户名muss länger als ein Zeichen sein”);
}
返回false;
}
功能检查可用性(){
//$.post(“Login/checkusername.php”{
$.post(“/echo/html/”{
“用户名”:$.trim($username.val())
},函数(结果){
//如果结果是1
如果(结果==1){
寄存器().done(函数()){
$errorBox.append(“Hurray!

”); }); }否则{ //显示用户名不是 //可用 $errorBox.html(“用户名nicht verfuegbar”); $username.css({borderColor:“blue”}); 返回; } }); } 函数寄存器(){ //返回$.post(“Login/register.php”{ 返回$.post(“/echo/html/”{ 用户名:$.trim($username.val()), 电邮:电邮,, 蒲草,蒲草, passwort2:passwort2, },功能(信息){ $errorBox.html(信息); }); } });
除非绝对必要,否则你不应该将vanilla JS与JQuery混合使用。我们也可以看到你的HTML吗?如果你使用任何JQuery,请全部使用!你的代码将缩小到三分之一大小,更具可读性。哇!你也在使用VanillaJS而不是JQuery。我只是粘贴操作代码来解决他的问题,糟糕的做法是另一个问题你是诚实的。哈。我像你说的那样编辑了我的代码,但它仍然不起作用,因为当用户名大于0时,我的变量“validate”是未定义的,我尝试返回我的checkAvailability()。你能主持你的公司吗
if (username.length > 0) {
    document.getElementById("username").style.borderColor = "";
    // document.getElementById("errorBox").innerHTML =
    // "";
    return checkAvailability();
} else {
    document.getElementById("username").style.borderColor = "red";
    document.getElementById("errorBox").innerHTML = "Username muss länger als ein Zeichen sein";
    // alert('Username must be longer than one sign');
    return false;
}
if (result == 1) {
    // show that the username is
    // available
    document.getElementById("errorBox").innerHTML = "";
    return true;
} else {
    // show that the username is NOT
    // available
    document.getElementById("errorBox").innerHTML = "Username nicht verfuegbar";
    document.getElementById("username").style.borderColor = "red";
    return false;
}
$("#register").on("submit", function (evt) {

    evt.preventDefault();
    var $username = $("#username");
    var email = $.trim($("#email").val());
    var passwort = $.trim($("#passwort").val());
    var passwort2 = $.trim($("#passwort2").val());
    var $errorBox = $("#errorBox");
    var isUser = checkUsername();

    if (isUser) {
        checkAvailability();
    }

    function checkUsername() {
        var usernameVal = $.trim($username.val());
        if (usernameVal.length > 0) {
            $username.css({borderColor: "none"});
            return true;
        } else {
            $username.css({borderColor: "red"});
            $errorBox.html("Username muss länger als ein Zeichen sein");
        }
        return false;
    }

    function checkAvailability() {
        //$.post("Login/checkusername.php", {
        $.post("/echo/html/", {
            "username": $.trim($username.val())
        }, function (result) {
            // if the result is 1
            if (result == 1) {
                register().done(function() {
                    $errorBox.append("<p>Hurray!</p>");
                });
            } else {
                // show that the username is NOT
                // available
                $errorBox.html("Username nicht verfuegbar");
                $username.css({borderColor: "blue"});
                return;
            }
        });
    }

    function register() {
        //return $.post("Login/register.php", {
        return $.post("/echo/html/", {
            username: $.trim($username.val()),
            email: email,
            passwort: passwort,
            passwort2: passwort2,
        }, function (info) {
            $errorBox.html(info);
        });
    }
});