簡體   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