我有一个返回值的HTTPRequest。我正在使用回调函数捕获这样的值。
如果用户名在数据库中重复,代码将执行并发出警报。但是,“return 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);
}
答案 0 :(得分:0)
按return false
,您只能从callback
功能返回。您必须从checkNewUserForm()
函数返回以停止保存新用户。为此,您可以使用boolean
变量hasDuplicateUsername
来检查是否存在重复的用户名条目,以便您可以在回调中将其设置为true。在saveNewUser()
之前,您应该检查它是否为false
。
function checkNewUserForm(){
var hasDuplicateUsername = false;
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();
hasDuplicateUsername = true;
}
});
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;
}
if(!hasDuplicateUsername) {
saveNewUser(first_name,last_name,username,password);
}
}