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

Joh*_*lia 6 jquery

在脚本需要一段时间加载时,我遇到了一些问题,因为调用了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');
    }
});
Run Code Online (Sandbox Code Playgroud)

在阅读文档时,它说:

默认情况下,所有请求都是异步发送的(默认情况下设置为true).如果需要同步请求,请将此选项设置为false.跨域请求和dataType:"jsonp"请求不支持同步操作.请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作.从jQuery 1.8开始,不推荐使用async:false和jqXHR($ .Deferred); 您必须使用完整/成功/错误回调.

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

Fré*_*idi 5

它不会影响您的脚本.

这意味着,在执行同步AJAX请求时,不应使用由返回的对象(例如done()fail())公开的延迟 API ,而是依赖于和处理程序.$.ajax()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');
});
Run Code Online (Sandbox Code Playgroud)