如何使jquery"$ .post"请求同步

pyt*_*033 162 html javascript jquery

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

我正在使用ajax将某些字段与已经存在于db中的字段进行比较,并且默认情况下该$.post()方法是异步操作的.

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

Pao*_*fan 203

jQuery <1.8

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

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

$.post( url, data, success, dataType );
Run Code Online (Sandbox Code Playgroud)

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

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});
Run Code Online (Sandbox Code Playgroud)

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

这里有$.ajax()参数的完整细节:jQuery.ajax() - jQuery API文档.


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

的jQuery> = 1.8将不会阻止http请求时的UI,所以我们必须使用一种解决方法,只要该请求进行处理,以停止用户交互.例如:

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

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


Jas*_*ary 17

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


pyt*_*033 6

从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
    });          
}
Run Code Online (Sandbox Code Playgroud)

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

  • @HugoZink肯定是复制的,但是我们两个答案都是从jQuery docs复制的:-D (2认同)