尽管没有将async设置为false,Ajax请求仍会同步运行

时间:2018-03-26 17:58:53

标签: javascript jquery ajax asynchronous

运行与以下代码相当的代码时,我得到“主线程上的同步XMLHttpRequest已被弃用”:

$window.bind('scroll', function () {
    if ($(this).scrollTop() > 0 && !requestProcessed) {
        requestProcessed = true;
        $.ajax(options);
    }
});

选项是这样的:

var options = {
    error: function () {...},
    success: function () {...},
    type: "GET",
    url: "/home/async-contents"
};

我的理解是Ajax请求默认为async。设置async: true无效。为什么请求仍然可以同步运行?

1 个答案:

答案 0 :(得分:0)

success函数中,我将响应附加到正文。响应的<script> 异步。警告不是因为原始请求是同步运行的,而是因为响应中的脚本标记被附加到正文,这是一个阻塞操作。

async属性添加到该脚本使其无阻塞,我停止接收警告。但是,重要的是要注意,任意标记脚本async会导致竞争条件,并且应该根据具体情况进行。