如何使一个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