簡體   English   中英

為什么直到第二次調用AJAX / Javascript函數才能正常工作?

[英]Why does this AJAX/Javascript function not work properly until the second time its called?

我一直在嘗試着圍繞AJAX請求,目前正在為Javascript中的twitter-bootstrap向導實現一些服務器端驗證。 我遇到了一些奇怪的行為,該函數在第一次執行時失敗,但是第二次按預期工作。 我已經將代碼簡化為以下結構:

function do_ajax_validate($user,$email) {
    $.ajax({url: "checkuser.php?field=username&query=" + $user, success: function(result){
        if (result != 'Valid')
            {
                $("#userlabel").html(result);
                $("#userdiv").addClass("has-error");
                $("#userdiv").removeClass("has-success");
                $("#username").focus();
                is_good[0] = false;

            } else {
                $("#userlabel").html($user + " is available!");
                $("#userdiv").removeClass("has-error");
                $("#userdiv").addClass("has-success");
                is_good[0] = true;
                console.log(is_good[0]);

            }
    }});

    console.log(is_good[0]);    

    $.ajax({url: "checkuser.php?field=email&query=" + $email, success: function(result){
        if (result != 'Valid')
            {
                $("#emaillabel").html(result);
                $("#emaildiv").addClass("has-error");
                $("#emaildiv").removeClass("has-success")
                $("#email").focus()
                is_good[1] = false;

            } else {
                $("#emaillabel").html('Looks good!');
                $("#emaildiv").removeClass("has-error");
                $("#emaildiv").addClass("has-success")
                is_good[1] = true;
            }
    }});

    console.log(is_good[0]);
    console.log(is_good[1]);
    if ((is_good[0])&&(is_good[1])) {
        return true;
    }  else {
        return false;
    }
}

每當我進入控制台並嘗試運行該功能時,我都會使用一個我知道可用的用戶/電子郵件對其進行調用,並獲得以下輸出:

do_ajax_validate('available_username', 'available@email.address');
false
false
false

每當我運行完全相同的行時,都會得到以下輸出:

do_ajax_validate('available_username', 'available@email.address');
true
true
true

然后檢查一個我知道的用戶名/電子郵件,它返回最后一個值:

do_ajax_validate('taken_username', 'taken@email.address');
true
true
true

並且(您猜對了)-再次執行該函數將返回預期結果:

do_ajax_validate('available_username', 'available@email.address');
false
false
false

數小時以來,我一直在嘗試不同的方法,並且得到了同樣奇怪的結果。 我究竟做錯了什么?

Ajax調用在javascript中異步運行。 success回調僅在Ajax調用返回后才執行,因此可以在success函數執行之前調用console.log()

您可以針對此問題有兩種解決方案:

  1. 在分配給成功屬性的回調中處理結果。 嘗試在成功屬性下控制台結果
  2. 在AJAX調用下使用async: false ,例如:

$ .ajax({url:“ checkuser.php?field = username&query =” + $ user,async:false,success:function(result){console.log(“ result”)}}));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM