ボタンが押されたときにいくつかのフィールドを検証する関数があります。最初に、ユーザー名とパスワードが本物かどうかを確認します。次に、パスワードが適切に安全である場合。次に、パスワード確認ボックスと一致する場合。ただし、最初の関数のアラートがポップアップする前に、ユーザーが本物かどうかを確認する 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();
which を呼び出します
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 がデータの取得を完了するのを待っていません。アラート ボックスを閉じた後、関数内がコンソールに表示されますconsole.log(returnedData)
。valUsr()
なぜこうなった?どうすれば防ぐことができますか?ありがとう!