6

在脚本需要一段时间加载时,我遇到了一些关于调用 ajax 错误函数的问题。但我能够通过添加来修复它async: false

例如:

$.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)。如果您需要同步请求,请将此选项设置为 false。跨域请求和 dataType: "jsonp" 请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。从 jQuery 1.8 开始,不推荐在 jqXHR ($.Deferred) 中使用 async: false ;您必须使用完成/成功/错误回调。

问)关于 jqXHR($.Deferred)的最后一部分是什么意思?这会影响我的脚本吗?

4

1 回答 1

5

它不会影响您的脚本。

这意味着,在执行同步 AJAX 请求时,不应使用由返回的对象公开的延迟API $.ajax()(例如done()fail()),而应依赖completeanderror处理程序。

换句话说,您的代码已经使用了正确的模式。如果它使用延迟操作,则必须对其进行修改,例如:

// 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');
});
于 2012-11-30T09:00:08.160 回答