使用jquery append()函数进行Javascript异步加载

时间:2014-07-28 18:28:35

标签: javascript jquery asynchronous

修改:我正在寻找一种异步方式" include"另一个javascript文件。

如果我加载这样的javascript文件怎么办:

<script src="http://my.website.com/file.js" async="" type="text/javascript"></script>

我在javascript文件中

$('head').append('<script src="http://other-website.com/other-file.js" type="text/javascript"></script>');

此文件是否仍会加载异步,包括other-file.js

我猜我需要像那样

添加async
$('head').append('<script async="" src="http://other-website.com/other-file.js" type="text/javascript"></script>');

要完全加载所有javascript异步,对吧?

但在other-file.js内,我在file.js

中使用了一些函数

2 个答案:

答案 0 :(得分:0)

是的,您需要添加async属性,如果您依赖其他文件,则需要一些复杂的逻辑来了解它何时被加载。

有为此目的而构建的库,你看过它们吗?我可以推荐RequireJS,这样你可以像这样包装代码:

require(["helper/util"], function(util) {
    //This function is called when scripts/helper/util.js is loaded.
    //If util.js calls define(), then this function is not fired until
    //util's dependencies have loaded, and the util argument will hold
    //the module value for "helper/util".
});

答案 1 :(得分:0)

这取决于JS在哪里运行,其中包含.append()行,以及 it 是否具有async属性。

如果它在您的文档的head中运行,并且它附加到head,那么如果附加的<script>标记没有&#,它将不会异步(将阻止) 39; t具有async属性。

原因是file.js很可能在文档的<head>被处理之前加载并被解析。 JavaScript将阻止浏览器的HTTP连接,直到它完成解析没有async的任何外部JS,这意味着它将在{{1}下面添加新的<script>标记然后继续处理它并阻止HTTP连接,除非存在<head>属性。