我是靠谱客的博主 活力歌曲,最近开发中收集的这篇文章主要介绍makerequest ajax,如何使jQuery的AJAX请求同步(How to make JQuery-AJAX request,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如何使一个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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部