如何使Ajax请求同步?
我有一个需要提交的表格。但是只有在用户输入正确的密码时才需要提交。
这是表单代码:
用于发送和检查密码的jQuery代码是这样的:
var ajaxSubmit = function(formE1) {
var password = $.trim($('#employee_password').val());
$.ajax({
type: "POST",
async: "false",
url: "checkpass.php",
data: "password="+password,
success: function(html) {
var arr=$.parseJSON(html);
if(arr == "Successful") {
return true;
} else {
return false;
}
}
});
}
但是,无论ajax请求返回的值如何,该表单始终提交。我检查了其他所有内容。输入正确的密码后,arr的值将显示为“成功”,反之亦然。
如何使此请求同步?据我可以调试,请求是异步的,因此在请求完成之前先提交表单。
checkpass.php的代码
require("includes/apptop.php");
require("classes/class_employee.php");
require("classes/class_employee_attendance.php");
$employee_password=$_POST['password'];
$m=new employee();
$m->setbyid_employee(1);
$arr=$m->editdisplay_employee();
if($arr['employee_password'] == $employee_password)
{
$res="Successful";
}
else
{
$res="Password not match";
}
echo $res;
?>
更新:已找到解决方案。
正如Olaf Dietshche指出的那样:的返回值ajaxSubmit不是的返回值success:
function(){...}。ajaxSubmit完全不返回任何值,该值等于undefined,其结果为true。
这就是为什么总是提交表单并且独立于是否同步发送请求的原因。
因此,我1在成功后将变量设置为成功函数内部。并从成功函数中检查了它的值,如果它1不在成功函数中,那么我写了return true ... else
return false。那行得通。
更新的工作代码:
var ajaxsubmit=function(forme1) {
var password = $.trim($('#employee_password').val());
var test="0";
$.ajax({
type: "POST",
url: "checkpass.php",
async: false,
data: "password="+password,
success: function(html) {
if(html == "Successful") {
test="1";
} else {
alert("Password incorrect. Please enter correct password.");
test="0";
}
}
});
if(test=="1") {
return true;
} else if(test=="0") {
return false;
}
}