不推荐使用jQuery 1.8,async:false和jqXHR($ .Deferred)

时间:2012-11-30 08:35:03

标签: jquery

在脚本需要一段时间加载时,我遇到了一些关于调用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)的意义是什么?这会影响我的脚本吗?

1 个答案:

答案 0 :(得分:5)

它不会影响您的脚本。

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

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

// 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');
});