我在设置变量值时遇到问题。我的代码如下。
function fpform(){
var response_new = '';
var password_reset = "";
var fpemail = $('#frgtpwd').val();
//var fpemail = document.getElementById('frgtpwd').value;
if (fpemail == ""){
$('span#fperror').text("insert your emal address");
//document.getElementById('fperror').innerHTML = "Insert your email address";
password_reset = 'no';
} else {
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(fpemail)==false) {
$('span#fperror').text("Email address is not in valid format");
//document.getElementById('fperror').innerHTML = "Email address is not in valid format";
password_reset = 'no';
} else {
$("#loader").html('<img src="images/ajax-loader.gif" />');
$.post("forgot_password_process.php", {
email:fpemail
}, function(response){
response_new = response.trim();
}).success(function () {
if (response_new == 'yes'){
$("#fperror").html('<font color="green"><b>Your password has been reset now and emailed to you </b></font>');
$("#loader").empty();
password_reset = 'yes';
} else {
$("#loader").empty();
$("#fperror").html('<font color="black"><b> Email address was not found in database!</b></font>');
password_reset = 'no';
}
});
}
}
if (password_reset == "yes"){
alert(password_reset);
return true;
} else {
alert(password_reset);
return true;
}
}
最后一个if条件是检查password_reset变量是否设置为yes,并根据该值返回true或false。但警报显示password_reset变量的空白值。我似乎无法找到这背后的问题,因为在到达最后一个if之前应该分配password_reset变量。任何人都可以建议一个解决方案。
亲切的问候
答案 0 :(得分:4)
$.post()
是异步的,因此在您提醒数据时请求尚未完成。为此,您需要在success-callback中调用警报,以确保在尝试提醒之前拥有数据。另一种选择是使用同步AJAX调用(尽管这很少是一个很好的选择)。
<强>更新强>
不确定为什么你的函数返回true / false,但为了工作,你必须进行同步AJAX调用,否则外部函数将在AJAX调用完成之前很久就返回,并且此时你不要不知道答案是什么。
您应该尝试重新构建代码,以使代码依赖于外部函数的响应,而不是由success-callback调用。
答案 1 :(得分:-1)
我要发布和Christofer一样的东西。这是一个固定的代码示例。只需删除最后一个代码块。
.success(function () {
if (response_new == 'yes'){
$("#fperror").html('<font color="green"><b>Your password has been reset now and emailed to you </b></font>');
$("#loader").empty();
password_reset = 'yes';
alert 'yes';
return true;
} else {
$("#loader").empty();
$("#fperror").html('<font color="black"><b> Email address was not found in database!</b></font>');
password_reset = 'no';
alert 'no';
return false;
}