什么是Synchronous XMLHttpRequest?

时间:2015-07-06 18:08:01

标签: javascript xmlhttprequest

我正在测试,看看我是否可以在文档准备好后使用javascript加载.js,并从chrome获得此警告消息:

"主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。"

我的代码如下:

$(document).ready(function(){
    var s=$('<script src="test.js"></script>');
    $('body').append(s);
});

我的问题是:

1)在这种情况下,什么被认为是&#34;同步XMLHttpRequest&#34;?我认为它与加载&#39; test.js&#39;有关,但如果我将其更改为var s=$('<img src="image.png"></img>');,警告信息就不会显示。

2)如果必须以这种方式加载.js文件,那么最佳做法是什么?

***********编辑***********

test.js的内容是

console.log(document.getElementsByTagName('h1'))

HTML中有h1

1 个答案:

答案 0 :(得分:1)

我认为您的问题与async

有关

在HTML5中:asyncdefer,您可以告诉浏览器何时运行您的JavaScript代码。有三种可能性:

<script       src="myscript.js"></script>

<script async src="myscript.js"></script>

<script defer src="myscript.js"></script>
  1. 如果没有asyncdefer,浏览器会立即运行您的脚本, 在渲染脚本标记下面的元素之前。
  2. 使用async(异步),浏览器将继续加载HTML 页面并在浏览器加载并执行脚本时呈现它 同时。
  3. 使用defer,浏览器将在页面完成后运行您的脚本 解析。 (不必完成下载所有图像文件。这个 很好。)
  4. 我在下面找到答案:synchronous-xmlhttprequest-on-the-main-thread-is-deprecated

      

    使用jQuery将脚本标记附加到文档将导致它   使用async:false加载脚本并触发此警告。

    var script = $("<script></script>");
    script.attr("src", player.basepath + "whatever.js");
    $(document.body).append(script);
    

    未经测试。仅供参考。