如何使jquery“$.post”请求同步

IT技术 javascript jquery html
2021-01-27 19:34:32

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

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

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

3个回答

jQuery < 1.8

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

如果您正在调用$.post(),例如,像这样:

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

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

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

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

此处提供了$.ajax()参数的完整详细信息jQuery.ajax() – jQuery API 文档


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

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

  • 使用插件,例如BlockUI
  • 在调用之前手动添加一个叠加层$.ajax(),然后在调用AJAX.done()回调时将其移除

请看一下这个答案的例子。

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

从 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 是唯一可以设置异步的请求类型

这个答案似乎是这个答案的副本
2021-04-02 19:34:32
@HugoZink 这肯定是复制的,但是我们的两个答案都是从 jQuery 文档中复制的 :-D
2021-04-11 19:34:32