我有一個返回值的HTTPRequest。我用回調函數捕獲這樣的值。使用回調函數從異步請求返回值
如果用戶名在數據庫中重複,代碼將執行併發出警報。然而,「返回false」不起作用,並且表單無論如何都被提交(saveNewUser)與重複的用戶名。到目前爲止,我所見過的所有例子都只是在回調中停下來,就像在我的代碼中一樣。那麼如何實現返回false在其他情況下停止執行:首先,姓氏和密碼檢查?
非常感謝。
function checkUsername(callbackUsername){
var username = document.getElementById('username_id').value;
var ajaxRequest = getXMLHttp();
ajaxRequest.onreadystatechange = function()
{
if(ajaxRequest.readyState == 4 && ajaxRequest.status==200){
var response = trim(ajaxRequest.responseText);
callbackUsername(response);
}
};
var url = "../admin/check_unique_username.php";
var parameters = "username="+username;
ajaxRequest.open("POST", url, true);
ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajaxRequest.send(parameters);
}
function checkNewUserForm(){
if(document.getElementById('first_name_id').value === ""){
alert("First Name cannot be blank!");
document.getElementById('first_name_id').focus();
return false;
}
if(document.getElementById('last_name_id').value === ""){
alert("Last Name cannot be blank!");
document.getElementById('last_name_id').focus();
return false;
}
checkUsername(function(result) {
if(result > 0){
alert("ERROR: Username already exist. Please select a different username!!");
document.getElementById('username_id').focus();
return false;
}
});
re = /[0-9]/;
if(!re.test(document.getElementById('password_id').value)) {
alert("Error: password must contain at least one number (0-9)!");
document.getElementById('password_id').focus();
return false;
}
saveNewUser(first_name,last_name,username,password);
}
對於一個基本的用例,我只是用'checkUsername'函數包裝所有'checkNewUserForm'。然而,這也將是一個適當的地方使用承諾,其中有像https://github.com/kriskowal/q – Harangue
Sheeeet,我寫出了一個完整的答案,然後它被標記爲重複:)這是我寫給你:http://www.vostok.xyz/32038674_answer.txt – Utkanos
我剛剛找到了一個解決方案:將saveNewUser函數調用內部的checkUsername結果<0。它的工作,但它有沒有其他方式? –