【发布时间】:2012-10-17 22:35:16
【问题描述】:
我有一个功能可以在按下按钮时验证某些字段。第一个检查用户名和密码是否真实。然后如果密码是适当安全的。然后,如果它与确认密码框匹配。但是,在第一个函数中的警报弹出之前,检查用户是否真实的 ajax 似乎没有完成。
$(document).ready(function() {
$('#submit_pw_ch').on('click', function(){
var alertString = "Please correct the following errors: \n"
//current username and password are correct
var vUsr = valUsr();
//new password is sufficiently secure
var vPwd = valPwd();
//confirmation of new password is same as previous box
var sPwd = samePwd();
console.log('valid user : ' + vUsr + ' valid password : ' + vPwd + ' same password : ' + sPwd);
//append appropriate warnings to alert string
if ( !vUsr ) { alertString += "-Your current username and password are invalid. \n"; }
if ( !vPwd ) { alertString += "-The new password you have selected is not strong enough. \n"; }
if ( !sPwd ) { alertString += "-The confirmation of your new password does not match the previous entry. \n"; }
if ( !vUsr || !vPwd || !sPwd ) {
alert(alertString);
return false;
} else {
//change password
}
});
});
所以检查的行是var vUsr = valUsr();,它调用
function valUsr() {
var un = $('#uNameInput').val();
var pw = $('#uPwdInput').val();
//return value
var validUsr = false;
$.ajax({
type: "post",
url: "queries/confirm_user.php?<?=time()?>",
data: "un=" + un + "&pw=" + pw,
dataType: "json",
success: function (returnedData) {
console.log(returnedData)
if (data == 'true') {
validUsr = true;
} else {
validUsr = false;
}
}
});
return validUsr;
}
虽然警报没有等待 ajax 完成获取它的数据,但不知何故。关闭警报框后,valUsr() 函数中的 console.log(returnedData) 出现在控制台中。为什么会这样?我该如何预防?谢谢!
【问题讨论】:
-
valUsr()将总是返回false。 Ajax 请求默认运行异步。 -
@jAndy 我知道你是对的。谢谢你。出于某种原因,当我之前将 async 设置为 false 时,我发誓它不起作用。但它现在成功了。非常感谢!
标签: javascript jquery