【发布时间】:2012-12-07 22:47:10
【问题描述】:
如何使 ajax 请求同步?
我有一个表格需要提交。但只有在用户输入正确密码时才需要提交。
表格代码如下:
<form name="form" action="insert.php" method="post" onSubmit="return ajaxSubmit(this);" >
发送和检查密码的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 的代码
<?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 内的成功函数。并在success函数外检查它的值,如果在success函数外是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;
}
}
【问题讨论】:
-
你的服务器响应的数据类型是什么......json or html ??
-
您可以通过按钮点击事件调用ajax并在提交时删除表单并在成功事件时使用表单提交功能。
-
@bipen: 我的服务器响应的数据类型是html only
-
@Dinesh:是的,我知道可以这样做。但我不想诉诸于此。有什么方法只能通过这种方式来实现?
-
thn 为什么你使用
$.parseJSON(html);...pareseJson 采用格式良好的“JSON”字符串并返回生成的 JavaScript 对象...检查你的萤火虫这给了console.log(html)跨度>
标签: jquery ajax synchronous