[英]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,它将在继续操作之前等待呼叫结束。
我想validatedUser
和checkRegisterUsername
是同一个函数,而您忘记了更改名称。
AJAX调用通常是异步的。 这意味着您不能等待返回值: success
函数将在AJAX调用成功时执行,但要在单独的上下文中执行。
即使使AJAX调用同步,在成功/错误回调中return
也是没有意义的。 另外,您尝试捕获的返回值是checkRegisterUsername
,它根本没有返回状态,这就是未定义的原因。
要实现您想要的目标,请尝试将alert
部分放在success
处理程序中,即不要return a
写alert(a)
并查看会发生什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.