如何使一个jQuery的“$ .post”请求同步

我已经googling这个,并避免在我的bug修复列表很长一段时间这个错误现在,但我终于到了列表的最后,我必须做一个函数返回true / false的最后一个陈述validation成功与否。

我使用ajax来比较某些字段与那些已经在数据库中的字段,默认情况下$.post()方法是asynchronous操作。

我在调用onSuccess设置一个variables,调用方法没有得到一个响应,因此,所有我的js / jquery失败pageLoad …我宁愿如果我仍然可以继续使用$.post方法。

jQuery <1.8

我可以build议你使用$.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文档 。


编辑:jQuery 1.8“async:false”弃用通知

对于jQuery> = 1.8 ,解决scheme应该有所不同。

现在的想法是,从现在开始jQuery不会阻塞UI,要么使用插件(例如BlockUI ),要么在调用$.ajax()之前手动添加覆盖层,然后从AJAX .done()callback中移除它。

请看看这个答案可能的实现。

如果您希望同步请求将请求的async属性设置为false 。 查看jQuery AJAX文档

从Jquery文档:您指定async选项为false以获得同步Ajax请求。 然后,您的callback可以设置一些数据之前,你的母亲function进行。

如果按照build议进行更改,则代码如下所示:

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

这是因为$ .ajax是唯一可以为其设置asynchronous的请求types