问题描述
我已经在谷歌搜索这个,并在我的错误修复列表中避免这个错误现在很多时间,但我终于到达了列表的最后,我最后要使一个函数返回 true /false 来表示是否验证是否成功。
我正在使用 ajax 将某些字段与已经在 db 中的字段进行比较,默认情况下,$.post()
方法是异步操作的。
我在调用 onSuccess
中设置一个变量,调用方法没有得到响应,所以我的所有 js /jquery 在 pageLoad 上失败… 我更喜欢如果我仍然可以继续使用 $.post
方法。
最佳解决方案
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()
参数的详细信息:jQuery.ajax() – jQuery API Documentation 。
编辑:jQuery 1.8 “async:false” 弃用通知
对于 jQuery> = 1.8,解决方案有所不同。
现在的想法是,由于现在 jQuery 不会阻止 UI,要么使用插件 (例如 BlockUI),要么在调用 $.ajax()
之前手动添加一个叠加层,而是从 AJAX .done()
回调中删除它。
请查看 this answer 以获得可能的实现。
次佳解决方案
如果要同步请求,将 async
属性设置为 false
作为请求。查看 jQuery AJAX Doc
第三种解决方案
从 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 是唯一可以设置异步性的请求类型
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。