当前位置: 首页 > 面试题库 >

如何使用jQuery $ .getScript()方法包含多个js文件

花玄裳
2023-03-14
问题内容

我正在尝试将javascript文件动态包含到我的js文件中。我对此进行了一些研究,发现jQuery $ .getScript()方法将是理想的选择。

// jQuery
$.getScript('/path/to/imported/script.js', function()
{
    // script is now loaded and executed.
    // put your dependent JS here.
    // what if the JS code is dependent on multiple JS files? 
});

但是我想知道这种方法是否可以一次加载多个脚本?我之所以这样问,是因为有时我的javascript文件依赖于多个js文件。

先感谢您。


问题答案:

答案是

您可以将promise与一起使用,getScript()并等待所有脚本加载完毕,例如:

$.when(
    $.getScript( "/mypath/myscript1.js" ),
    $.getScript( "/mypath/myscript2.js" ),
    $.getScript( "/mypath/myscript3.js" ),
    $.Deferred(function( deferred ){
        $( deferred.resolve );
    })
).done(function(){

    //place your code here, the scripts are all loaded

});

jsfiddle

ANOTHER FIDDLE

在上面的代码中,添加Deferred并将其解析在内部$()就像将其他任何函数放在jQuery调用中一样$(func),就像,

$(function() { func(); });

也就是说,它等待DOM准备就绪,因此在上面的示例$.when,由于调用在DOMready回调中解析,因此等待所有脚本加载以及$.Deferred DOM准备就绪。

对于更通用的用途,方便的功能

可以创建一个接受任何脚本数组的实用程序函数,如下所示:

$.getMultiScripts = function(arr, path) {
    var _arr = $.map(arr, function(scr) {
        return $.getScript( (path||"") + scr );
    });

    _arr.push($.Deferred(function( deferred ){
        $( deferred.resolve );
    }));

    return $.when.apply($, _arr);
}

可以这样使用

var script_arr = [
    'myscript1.js', 
    'myscript2.js', 
    'myscript3.js'
];

$.getMultiScripts(script_arr, '/mypath/').done(function() {
    // all scripts loaded
});

该路径将添加到所有脚本的前面,并且也是可选的,这意味着如果该数组包含完整的URL,则也可以执行此操作,并将路径全部省略

$.getMultiScripts(script_arr).done(function() { ...

参数,错误等

顺便说done一句,请注意,回调将包含许多与传入的脚本匹配的参数,每个参数代表一个包含响应的数组

$.getMultiScripts(script_arr).done(function(response1, response2, response3) { ...

每个数组将包含类似的内容[content_of_file_loaded,status,xhr_object]。我们通常不需要访问这些参数,因为无论如何脚本都会自动加载,并且在大多数情况下,done回调是我们真正要知道的所有脚本都已加载的全部,我只是为了完整性而添加它,在极少数情况下,需要访问已加载文件中的实际文本,或者需要访问每个XHR对象或类似对象。

另外,如果任何脚本加载失败,则将调用失败处理程序,并且后续脚本也不会加载

$.getMultiScripts(script_arr).done(function() {
     // all done
}).fail(function(error) {
     // one or more scripts failed to load
}).always(function() {
     // always called, both on success and error
});


 类似资料:
  • 问题内容: 我如何将一个js文件包含到另一个js文件中,以便坚持DRY原则并避免重复代码。 问题答案: 您只能在HTML页面中包含脚本文件,而不能在另一个脚本文件中包含脚本文件。也就是说,您 可以 编写JavaScript来将“包含”脚本加载到同一页面中: 您的代码很有可能取决于您的“包含”脚本,但是在这种情况下,它可能会失败,因为浏览器将异步加载“导入”脚本。最好的选择是仅使用jQuery或YU

  • 我在Azure-Databricks中使用spark-xml库。但是我不能得到正确的选项来读取这种包含多个名称空间的文件。 因此,我正在寻找一些帮助,让这在选项编码,或任何其他方法。 这是一个剥离的样品。

  • 我的项目由多个模块组成。每个模块都可以独立运行,并有单独的log4j2.xml 假设项目X由三个模块组成: 模块A具有log4j2。xml(包含记录器和附加器) 模块B具有log4j2。xml 模块C具有log4j2。xml 在集成模块时,我必须手动将每个模块的log4j2.xml中的记录仪和应用程序复制粘贴到项目特定的log4j2.xml文件中。 为了避免复制粘贴,我希望XInclude包含多个

  • 本文向大家介绍使用jquery动态加载js文件的方法,包括了使用jquery动态加载js文件的方法的使用技巧和注意事项,需要的朋友参考一下 方法很简单,这里就不多废话了,直接奉上代码: 小伙伴们如果有什么疑问就在下面留言吧,大家共同进步。

  • 问题内容: 我有多个包含不同类型的txt文件的zip文件。如下所示: 如何使用pandas读取每个文件而不提取它们? 我知道每个zip文件是否为1个文件,我可以对read_csv使用压缩方法,如下所示: 任何有关如何执行此操作的帮助都将非常有用。 问题答案: 你可以传递到构建从包装成一个多文件一个CSV文件。 码: 将所有内容读入字典的示例:

  • 我想创建一个debian包,当安装时,它将用pip安装几个python包。我能想到两种方法: > 将python包安装到一个目录中,然后从该目录生成一个debian包。但这会混淆构建主机(例如其pip元数据),尤其是在主机已经安装了其中一些包的情况下。 用所有python包制作一个debian包,在debian安装和卸载过程中,运行一些脚本来安装/卸载python包。但是这将需要另外两个脚本来维护