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

时间:2011-04-28 15:47:39

标签: javascript jquery html

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

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

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

3 个答案:

答案 0 :(得分:196)

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 Documentation


jQuery> = 1.8“async:false”弃用声明

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

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

请查看this answer示例。

答案 1 :(得分:16)

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

答案 2 :(得分: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
    });          
}

这是因为$ .ajax是唯一可以为

设置异步的请求类型