概述
如何使一个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;
?>
更新:该解决方案已被发现。
正如指出的奥拉夫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;
}
}
Answer 1:
从jQuery.ajax()
异步布尔
默认值: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;
}
Answer 2:
这是如下那样简单,而且用得好好的。
我的解决方案完美地回答你的问题:如何使jQuery的AJAX请求同步
设置AJAX的AJAX调用之前同步的,那么你的Ajax调用后复位:
$.ajaxSetup({async: false});
$ajax({ajax call....});
$.ajaxSetup({async: true});
在你的情况是这样的:
$.ajaxSetup({async: false});
$.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;
}
}
});
$.ajaxSetup({async: true});
我希望它能帮助:)
Answer 3:
而不是添加onSubmit事件,可以防止对提交按钮的默认操作。
因此,在下面的HTML:
第一,阻止提交按钮的动作。 然后,让Ajax调用异步,并提交表单时的密码是正确的。
$('input[type=submit]').click(function(e) {
e.preventDefault(); //prevent form submit when button is clicked
var password = $.trim($('#employee_password').val());
$.ajax({
type: "POST",
url: "checkpass.php",
data: "password="+password,
success: function(html) {
var arr=$.parseJSON(html);
var $form = $('form');
if(arr == "Successful")
{
$form.submit(); //submit the form if the password is correct
}
}
});
});
Answer 4:
添加的dataType为JSON ......作出响应,JSON ..
PHP
echo json_encode(array('success'=>$res)); //send the response as json **use this instead of echo $res in ur php file**
JavaSript
var ajaxSubmit = function(formE1) {
var password = $.trim($('#employee_password').val());
$.ajax({
type: "POST",
async: "false",
url: "checkpass.php",
data: "password="+password,
dataType:'json', //added this so the response is in json
success: function(result) {
var arr=result.success;
if(arr == "Successful")
{ return true;
}
else
{ return false;
}
}
});
return false
}
Answer 5:
试试这个
该解决方案是,像这样的工作回调
$(function() {
var jForm = $('form[name=form]');
var jPWField = $('#employee_password');
function getCheckedState() {
return jForm.data('checked_state');
};
function setChecked(s) {
jForm.data('checked_state', s);
};
jPWField.change(function() {
//reset checked thing
setChecked(null);
}).trigger('change');
jForm.submit(function(){
switch(getCheckedState()) {
case 'valid':
return true;
case 'invalid':
//invalid, don submit
return false;
default:
//make your check
var password = $.trim(jPWField.val());
$.ajax({
type: "POST",
async: "false",
url: "checkpass.php",
data: {
"password": $.trim(jPWField.val);
}
success: function(html) {
var arr=$.parseJSON(html);
setChecked(arr == "Successful" ? 'valid': 'invalid');
//submit again
jForm.submit();
}
});
return false;
}
});
});
Answer 6:
你可以试试这个,
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")
{
**$("form[name='form']").submit();**
return true;
}
else
{ return false;
}
}
});
**return false;**
}
文章来源: How to make JQuery-AJAX request synchronous
最后
以上就是活力歌曲为你收集整理的makerequest ajax,如何使jQuery的AJAX请求同步(How to make JQuery-AJAX request的全部内容,希望文章能够帮你解决makerequest ajax,如何使jQuery的AJAX请求同步(How to make JQuery-AJAX request所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复