我一直在谷歌搜索这个,并在我的错误修复列表中避免这个错误很长一段时间了,但我终于到了列表的末尾,最后我必须使函数返回true / false说明验证是否成功。
我正在使用ajax将某些字段与db中已有的字段进行比较,默认情况下$.post()
方法是异步操作。
我在调用onSuccess
中设置了一个变量,并且调用方法因为这个没有得到响应,所以我的js / jquery在pageLoad上都失败了...我宁愿我仍然可以继续使用$.post
方法。
答案 0 :(得分:196)
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
});
请注意async:false
参数对象末尾的$.ajax()
。
您可以在此处获得$.ajax()
参数的完整详细信息:jQuery.ajax() – jQuery API Documentation。
jQuery> = 1.8“async:false”弃用声明
jQuery> = 1.8不会在http请求期间阻止UI,因此只要处理请求,我们就必须使用变通方法来停止用户交互。例如:
$.ajax()
之前手动添加叠加层,然后在调用AJAX .done()
回调时将其删除。请查看this answer示例。
答案 1 :(得分:16)
如果您想要同步请求,请将async
属性设置为false
以获取请求。查看jQuery AJAX Doc
答案 2 :(得分:6)
从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是唯一可以为
设置异步的请求类型