在脚本需要一段时间加载时,我遇到了一些关于调用ajax错误函数的问题。但我可以通过添加async: false
来修复它。
E.g:
$.ajax({
type: 'POST',
url: REQUEST_URL,
async: false,
data: {
'id': id
},
dataType: 'json',
success: function(output) {
// success
},
error: function() {
alert('Error, please refresh the page');
}
});
阅读文档时说:
默认情况下,所有请求都是异步发送的(即设置为 默认为true)。如果需要同步请求,请将此选项设置为 假。跨域请求和dataType:“jsonp”请求没有 支持同步操作。请注意,同步请求可能 暂时锁定浏览器,在请求时禁用任何操作 活跃。从jQuery 1.8开始,使用async:false和jqXHR ($ .Deferred)已弃用;你必须使用完整/成功/错误 回调。
Q)最后一部分对jqXHR($ .Deferred)的意义是什么?这会影响我的脚本吗?
答案 0 :(得分:5)
它不会影响您的脚本。
这意味着,在执行同步AJAX请求时,不应使用由$.ajax()
返回的对象公开的deferred API(例如done()或fail() ),但依赖于complete
和error
处理程序。
换句话说,您的代码已经使用了正确的模式。如果它使用延迟操作,则必须修改它,如:
// Do not write this code.
$.ajax({
type: 'POST',
url: REQUEST_URL,
async: false, // <-- Synchronous request.
data: {
'id': id
},
dataType: 'json'
}).done(function(output) { // <-- Use of deferred method.
// success
}).fail(function() { // <-- There also.
alert('Error, please refresh the page');
});