[英]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()
。
您可以針對此問題有兩種解決方案:
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.