我已经在 google 上搜索了很长时间,并且在 bug 修复列表中避免了这个错误,但是我最终到达了列表的末尾,最后一个我必须让一个返回 true/false 的函数来说明验证是否成功。
我使用 ajax 将某些字段与数据库中已有的字段进行比较,默认情况下,$.post()方法异步执行操作。
$.post()
我在调用 onSuccess中设置了一个变量,而调用方法因此没有得到响应,所以所有 js/jquery 在 pageLoad 上都失败了... ... 我希望能够继续使用 $.post方法。
onSuccess
$.post
如果需要同步请求,请将该请求的 async属性设置为 false
async
false
JQuery < 1.8
我建议您使用 $.ajax()而不是 $.post(),因为它可定制性更强。
$.ajax()
如果你打电话给 $.post(),例如:
$.post( url, data, success, dataType );
你可以把它变成它的 $.ajax()等价物:
$.ajax({ type: 'POST', url: url, data: data, success: success, dataType: dataType, async:false });
请注意 $.ajax()参数对象末尾的 async:false。
async:false
这里有 $.ajax()参数的完整细节: Ajax ()-jQuery API 文档。
JQuery > = 1.8“ sync: false”弃用通知
JQuery > = 1.8不会在 http 请求期间阻塞 UI,因此只要处理了请求,我们就必须使用变通方法来停止用户交互。例如:
.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 是唯一可以为其设置异步性的请求类型