繁体   English   中英

使用Javascript的Ajax响应返回未定义

[英]Ajax response with Javascript returns Undefined

我试图将变量从表单字段传递给函数,该函数在返回时检查数据库中的值是否存在,并返回存在或not_exist,但这将返回未定义的值。

registerButtonAction.addEventListener('click', function() {
        disableRegisterButton();
        var getRegisterUsername = document.getElementById('registerUsername').value;

        var confirmUser = validatedUser(getRegisterUsername);
        alert(confirmUser); //alerts undefined instead of exist, or not_exist
        if (confirmUser === 'not_exist') {
            alert('Okay');
        }
    });

function checkRegisterUsername(getRegisterUsername){
    $.ajax({

        type:"post",
        url: "accounts/users/checkUsername/"+getRegisterUsername,
        data:{getRegisterUsername:getRegisterUsername},
        success: function(data){
            if(data==='exists'){
                var a='exists';
                return a;
            }else if(data==='not_exist'){
                var a='not_exist';
                return a;
            }else if(data==='navigation_error'){
                enableRegisterButton();
                document.getElementById('resistrationStatus').innerHTML="<small style='font-size: 15px; color: #ac2925'><i class='fa fa-info-circle'></i> FATAL ERROR OCCURRED, RELOAD PAGE</small>";
            }else{
                enableRegisterButton();
                document.getElementById('resistrationStatus').innerHTML="<small style='font-size: 15px; color: #ac2925'><i class='fa fa-info-circle'></i> FATAL ERROR OCCURRED, RELOAD PAGE</small>";
            }
        },
        error: function() {
            alert("Error Occured, Check your connection and try again.");
        }
    });
}

我猜您的validateUser(..)函数将调用您的Ajax。 在您的情况下,我认为您的ajax调用在警报发出时还没有结束。

尝试在ajax成功结束时移动这部分。 或者,您可以添加async: false作为ajax的参数。 如果async为false,它将在继续操作之前等待呼叫结束。

我想validatedUsercheckRegisterUsername是同一个函数,而您忘记了更改名称。

AJAX调用通常是异步的。 这意味着您不能等待返回值: success函数将在AJAX调用成功时执行,但要在单独的上下文中执行。

即使使AJAX调用同步,在成功/错误回调中return也是没有意义的。 另外,您尝试捕获的返回值是checkRegisterUsername ,它根本没有返回状态,这就是未定义的原因。

要实现您想要的目标,请尝试将alert部分放在success处理程序中,即不要return aalert(a)并查看会发生什么。

暂无
暂无

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

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