Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jQuery并行处理动态添加的脚本标记_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript 如何使用jQuery并行处理动态添加的脚本标记

Javascript 如何使用jQuery并行处理动态添加的脚本标记,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,以下是我的情况:我通过 $('body').append('<script src="http://localhost:8080/script_1.js"></script>'); $('body').append('<script src="http://localhost:8080/script_2.js"></script>'); 或jQuery函数:getScript $.getScript('http://localhost:8080/

以下是我的情况:我通过

$('body').append('<script src="http://localhost:8080/script_1.js"></script>');
$('body').append('<script src="http://localhost:8080/script_2.js"></script>');
或jQuery函数:getScript

$.getScript('http://localhost:8080/script_1.js');
我搜索了很多,发现jQuery实际上会删除脚本标记,解析源代码,并使用其ajax函数$.ajax()加载脚本,而不是让浏览器来处理。但是$.getScript()函数也使用$.ajax()并且没有阻塞。显然,这不是$.ajax()的错

下面是一个测试用例: 转到并在控制台中粘贴以下脚本,该脚本将通过jQuery两次添加js文件

$('body').append('<script src="/jquery-wp-content/themes/jquery/js/plugins.js"></script>');
$('body').append('<script src="/jquery-wp-content/themes/jquery/js/plugins.js"></script>');
$('body')。追加(“”);
$('body')。追加('');
检查时间线,你会发现它们是按顺序加载的。 当然,我可以使用上面的原生js或$.getScript()来节省时间

然而,我想知道为什么?为什么这些来自添加脚本标记的jqueryajax调用不是并行的

更新

更有趣的是,这个序列似乎只适用于同一来源的脚本。 我试着从谷歌托管的库中加载一些js文件,它们是并行的。我也试过跟随

$('body')。追加(“”);
$('body')。追加('');

将脚本附加到DOM时,根据跨域测试,会使用不同的ajaxTransport函数

当我们有一个协议:host:port时,就会发生跨域请求 不匹配

在第一种情况下,相同来源

JQuery使用函数
async=false
强制同步请求()

因此控制台上出现了警告(至少在金丝雀上)

主线程上的同步XMLHttpRequest已被弃用

在第二种情况下,交叉原点

JQuery使用ajax,如下所示()

script=jQuery(“”).prop({
async:true,
字符集:s.scriptCharset,
src:s.url
}).....
document.head.appendChild(脚本[0]);

正如您所说,它将并行加载。

“动态创建并添加到文档中的脚本默认是异步的”,根据,但它没有解释为什么jQuery附加的本地脚本不是这种情况。@Moob是的,我知道……正如我提到的,我可以使用纯javascript
document.body.appendChild(脚本)加载,是的,它们是并行的…但我只是想知道秘密地做了什么,使我的案例变得有序规范中有一些线索,但是-用他们的话说:“由于大多数历史原因,这些属性的确切处理细节有些琐碎,涉及HTML的许多方面。因此,实施要求必然分散在整个规范中……”
$('body').append('<script src="/jquery-wp-content/themes/jquery/js/plugins.js"></script>');
$('body').append('<script src="/jquery-wp-content/themes/jquery/js/plugins.js"></script>');
$('body').append('<script src="https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core.js"></script>');
$('body').append('<script src="https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core.js"></script>');
xhr.open(
        options.type,
        options.url,
        options.async,
        options.username,
        options.password
    );
script = jQuery("<script>").prop({
                    async: true,
                    charset: s.scriptCharset,
                    src: s.url
                }).....
document.head.appendChild(script[0]);