我有一个返回值的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。它的工作,但它有没有其他方式? –