[英]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.