jQuery 1.8中,使用jqXHR ($.Deferred)的async: false已被弃用。

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开始,使用async:false与jqXHR($.Deferred)已被弃用;您必须使用complete/success/error回调。 问)最后一部分关于jqXHR ($.Deferred)是什么意思?这会影响我的脚本吗?
1个回答

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

谢谢,我只是想确保我的代码在未来的jQuery中不会出现问题。 - John Magnolia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接