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

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

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

我在调用 onSuccess中设置了一个变量,而调用方法因此没有得到响应,所以所有 js/jquery 在 pageLoad 上都失败了... ... 我希望能够继续使用 $.post方法。

206192 次浏览

如果需要同步请求,请将该请求的 async属性设置为 false

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
});

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

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


JQuery > = 1.8“ sync: false”弃用通知

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

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

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

从 Jquery docs: 您可以指定 sync 选项为 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 是唯一可以为其设置异步性的请求类型