如何使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
在成功后将变量设置为成功函数内部。并从成功函数中检查了它的值,如果它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;
}
}
从jQuery.ajax()
async 布尔
值默认值:true
默认情况下,所有请求都是异步发送的(即默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。
因此,在您的请求中,您必须async: false
代替async: "false"
。
更新 :
的返回值ajaxSubmit
是 不是 的返回值success: function(){...}
。ajaxSubmit
完全不返回任何值,该值等于undefined
,后者的结果为true。
而 这 也是这个道理,为什么表单总是提交并独立发送请求同步与否。
如果只想提交表单,则响应为"Successful"
,则必须false
从@
返回ajaxSubmit
,然后success
按照@halilb的建议在函数中提交表单。
遵循这些思路的东西应该起作用
function ajaxSubmit() {
var password = $.trim($('#employee_password').val());
$.ajax({
type: "POST",
url: "checkpass.php",
data: "password="+password,
success: function(response) {
if(response == "Successful")
{
$('form').removeAttr('onsubmit'); // prevent endless loop
$('form').submit();
}
}
});
return false;
}
问题内容: 我过去曾经做过一些jQuery,但是我完全坚持了这一点。我了解使用同步ajax调用的优缺点,但是在这里将是必需的。 远程页面已加载(由firebug控制),但未显示任何返回信息。 我应该采取什么措施才能使函数正确返回? 问题答案: 在发出同步请求时,应该 范例-http://api.jquery.com/jQuery.ajax/#example-3 请注意: 设置异步属性设置为fals
问题内容: 我正在学习AngularJS,并尝试构建从Wordpress获取数据的前端系统。 在后端,一切似乎都已正确设置,当我使用jQuery ajax请求时,它可以毫无问题地获取数据。 但是,当我尝试使用AngularJS做同样的事情时,它不起作用。我正在尝试使用以下代码复制ajax请求: 如果我将其记录下来,它将输出0。我缺少什么? 谢谢你的帮助。 PS控制器如下所示: 问题答案: 在ang
问题内容: 我一直在使用此功能并在很长时间内都避免在错误修复列表中出现此错误,但是我终于到达了列表的末尾,最后我必须使函数返回true / false以声明是否验证成功与否。 我正在使用ajax将某些字段与数据库中已有的字段进行比较,并且默认情况下该方法以异步方式进行操作。 我在调用中设置了一个变量,因此,调用方法没有得到响应,因此我的所有js / jquery在pageLoad上都失败了…如果我
问题内容: 如何使用jQuery明确提出AJAX HTTPS GET请求?我正在尝试执行以下操作。在https页面上,我有一行代码,但是出现以下错误 如果相对资源来自https页面,为什么AJAX调用会尝试使用HTTP协议访问页面?如果$ .get(url)方法默认执行此操作,那么我如何使用jQuery进行显式的HTTPS GET请求?在http://forum.jquery.com/topic/
问题内容: 我在处理ajax请求时遇到麻烦。我遇到了错误 所以我尝试的是这个jQuery ajax请求: 但是它仍然无法正常工作。我仍然遇到错误。 我该如何解决? 问题答案: 这很容易,您应该首先设置服务器http响应标头。 问题不在于您的前端javascript代码。 您需要返回此标头: 要么 在Apache配置文件中,代码如下: 在nodejs中,代码是这样的:
问题内容: 注意 :我粘贴的代码不仅仅是ajax调用,以免代码是(导致)问题的一部分。但是,我认为并不是这样,因此您最好将注意力集中在和功能上。 还要注意,由于对此问题有一个评论(带有否决权),说我的代码很难解密,所以我很乐意澄清需要澄清的内容,如果这可以证明是找到问题的关键。 谢谢。 就是这个 我正在尝试抛弃jQuery,因为我唯一使用的是方法,而包括jQuery之类的整个库仅具有一项功能就令I