我有以下代碼來檢查用戶名是否已經存在。它使用AJAX請求到另一個頁面,該頁面返回1(用戶名存在)或0(用戶名不存在)。讓代碼等待,直到完成AJAX請求
function checkUsername(username,callback){
$.ajax({
url: '/check_username.php',
type: 'post',
data: {username: username},
dataType: 'json',
success : function(data){
switch(data.response){
case 0:
callback(true);
break;
case 1:
callback(false);
break;
}
}
});
};
var error; // 'undefined' for now
checkUsername('abc',function(data){
if(data == false){
// username exists
error = true;
}else{
// username does not exist
error = false;
};
});
if(error == false){
alert('username does not exist');
}else{
alert('username exists');
};
問題
的代碼檢查是否error = true
(有錯誤,即用戶名存在)或error = false
,但代碼繼續運行。它不會等到checkUsername
中的AJAX請求完成。所以它的總是「用戶名存在」(因爲error = undefined
,如果其他然後去else語句)。
問題
我怎樣才能確保代碼等待,直到AJAX請求(該checkUsername
功能)完全才去任何進一步的完成。
我有一個「部分」解決方案:當我換行的if-else語句,在一個setTimeout
檢查error = true
/false
,它的工作原理。問題是:多少毫秒?我想盡可能快地擁有它。 500ms的?如果AJAX響應沒有完成呢? 1000毫秒?這不是太長嗎?
我認爲比用setTimeout
做這個更好。任何人有想法?
這是異步的,你不能先用一個回調,然後下一行只是忽略回調並假設數據是可用的,它仍然異步 – adeneo
嘗試檢查'的console.log(data.response) '和'console.log(typeof data.response)' –
@adeneo這應該有效。這是一個不同的功能。 –