如何使jquery“$ .post”请求同步[重复]

Posted

技术标签:

【中文标题】如何使jquery“$ .post”请求同步[重复]【英文标题】:how to make a jquery "$.post" request synchronous [duplicate] 【发布时间】:2011-08-14 20:24:06 【问题描述】:

我一直在谷歌上搜索这个并在我的错误修复列表中避免这个错误很长时间了,但我终于到达了列表的末尾,最后我必须让函数返回 true/false说明验证是否成功。

我正在使用 ajax 将某些字段与数据库中已经存在的字段进行比较,默认情况下 $.post() 方法会异步执行它的操作。

我在调用 onSuccess 中设置了一个变量,因此调用方法没有得到响应,所以我的所有 js/jquery 在 pageLoad 上都失败了......如果我仍然可以继续使用,我会更喜欢$.post 方法。

【问题讨论】:

啊,你需要添加一个代码示例来澄清这一点。 不要这样做。它将冻结浏览器,直到服务器回复。 @Neal,这个问题之所以独特是因为 jQuery 有多种调用服务器页面的方式,我特别想知道如何使 $.post 请求同步,而不仅仅是 jQuery ajax 请求 【参考方案1】:

如果您想要同步请求,请将请求的 async 属性设置为 false。查看jQuery AJAX Doc

【讨论】:

【参考方案2】:

jQuery

我建议您使用$.ajax() 而不是$.post(),因为它更可定制。

如果你打电话给$.post(),例如,像这样:

$.post( url, data, success, dataType );

你可以把它变成它的 $.ajax() 等价物:

$.ajax(
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
);

请注意$.ajax()参数对象末尾的async:false

这里有$.ajax() 参数的完整详细信息:jQuery.ajax() – jQuery API Documentation。


jQuery >=1.8 "async:false" 弃用通知

jQuery >=1.8 不会在 http 请求期间阻塞 UI,因此只要处理请求,我们就必须使用变通方法来停止用户交互。例如:

使用插件,例如BlockUI; 在调用$.ajax()之前手动添加覆盖,然后在调用AJAX .done()回调时将其移除。

请查看this answer 的示例。

【讨论】:

【参考方案3】:

来自 Jquery 文档:您将 async 选项指定为 false 以获取同步 Ajax 请求。然后你的回调可以在你的母亲函数继续之前设置一些数据。

如果按照建议进行更改,您的代码将如下所示:

beforecreate: function(node,targetNode,type,to) 
    jQuery.ajax(
         url:    url,
         success: function(result) 
                      if(result.isOk == false)
                          alert(result.message);
                  ,
         async:   false
    );          

这是因为 $.ajax 是唯一可以设置异步的请求类型

【讨论】:

这个答案似乎是this答案的副本。 @HugoZink 肯定是复制的,但我们的两个答案都是从 jQuery 文档复制的:-D

以上是关于如何使jquery“$ .post”请求同步[重复]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery post ajax函数[重复]

jQuery基础(Ajax,load(),getJSON(),getScript(),post(),ajax(),同步/异步请求数据)

将响应数组格式化为 POST 请求 - jQuery

如何使用 Symfony 和 Jquery 发出 POST Ajax 请求

ajax/jquery POST 请求的不必要重复

Jquery 对ajax请求如何实现非异步