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

jQuery:按顺序加载脚本

敖硕
2023-03-14
问题内容

我正在尝试使用jQuery动态加载一些脚本:

var scripts = ['script1.js','script2.js','script3.js'];

$.each(scripts , function(i, val) {
     $.getScript(val, function() {
     console.log('loaded '+ val);
});

但是有时加载脚本的顺序会发生变化。前一个脚本成功加载后,如何加载每个脚本?


问题答案:

您可以通过使用回调函数$.getScript()作为递归函数调用在前一个完成加载后加载每个。

//setup array of scripts and an index to keep track of where we are in the process
var scripts = ['script1.js','script2.js','script3.js'],
    index   = 0;

//setup a function that loads a single script
function load_script() {

    //make sure the current index is still a part of the array
    if (index < scripts.length) {

        //get the script at the current index
        $.getScript(scripts[index], function () {

            //once the script is loaded, increase the index and attempt to load the next script
            console.log('Loaded: ' + scripts[index]);
            index++;
            load_script();
        });
    }
}

在您的代码中发生的是,脚本是同时被请求的,并且由于它们是异步加载的,因此它们以随机顺序返回并执行。

我尚未对此进行测试,但是如果脚本是在本地托管的,则可以尝试以纯文本格式检索它们,然后将所有代码存储在变量中,直到它们全部加载完毕为止,然后可以按顺序评估脚本:

var scripts   = ['script1.js','script2.js','script3.js'],

    //setup object to store results of AJAX requests
    responses = {};

//create function that evaluates each response in order
function eval_scripts() {
    for (var i = 0, len = scripts.length; i < len; i++) {
        eval(responses[scripts[i]]);
    }
}

$.each(scripts, function (index, value) {
    $.ajax({
        url      : scripts[index],

        //force the dataType to be `text` rather than `script`
        dataType : 'text',
        success  : function (textScript) {

            //add the response to the `responses` object
            responses[value] = textScript;

            //check if the `responses` object has the same length as the `scripts` array,
            //if so then evaluate the scripts
            if (responses.length === scripts.length) { eval_scripts(); }
        },
        error    : function (jqXHR, textStatus, errorThrown) { /*don't forget to handle errors*/ }
    });
});


 类似资料:
  • 问题内容: 在HTML页面中包含JavaScript的方法有很多。我知道以下选项: 内联代码或从外部URI加载 包括在或标记[ [1],[2] ] 没有属性或属性(仅外部脚本) 包含在静态源中或由其他脚本动态添加(处于不同的解析状态,具有不同的方法) 不计算硬盘中的浏览器脚本,javascript:URI和-attributes [[3] ],已经有16种方法可以使JS执行,我敢肯定我忘了一些东西

  • 我需要帮助。我正在创建一个项目,但在使用模板时遇到问题。我为标题和菜单创建了一个组件。菜单是一个侧边栏,在打开页面时隐藏。只有在登录后,菜单才会出现。但是javascript在那之后就不起作用了。 每当我进入登录屏幕时,我都会隐藏导航栏和侧边栏,当它出现并再次显示时,脚本将不再工作。当我去查看检查器时,脚本从元素中消失。

  • 假设我有 我可以运行什么NPM命令来让所有这些脚本按顺序启动。当我使用前/后修复时,它们会顺序启动,但不会等到父脚本完成后才执行。我假设唯一的解决方案是这样的:当在async.series助手函数中触发shell命令时,我如何让Gulp任务依次触发??我知道这可以用古普来完成,但我现在想坚持使用NPM来探索它的能力。感谢任何帮助!

  • 比如说,您正在主干上构建一个项目,需要按特定顺序加载脚本,例如需要在。 我怎样才能让它在脚本中保持有序? 我的,但由于文件是按字母顺序组织的,gulp将显示下划线。js在,以及我的不重要,它查看目录中的文件。 有人对此有想法吗? 我最好的主意是用,,重命名供应商脚本,以给他们正确的顺序,但我不确定我是否喜欢这样。 随着我了解的越来越多,我发现布朗瑟夫是一个很好的解决方案,起初可能会很痛苦,但它很棒

  • 问题内容: 好的,我发现必须发布一个新问题才能找到答案,这真是太荒谬了,可惜我在这里。让下一个任性的灵魂尽可能解决这个问题,让它尽可能简单。 要使ajax表单正常工作,我需要什么最新的脚本?到目前为止,我有; 我看过的页面指出我也需要jquery.unobtrusive-ajax.js,但这只是给我一个错误。是否加载了一些不兼容的版本? 过去,我已经为MVC3等进行过多次处理,但是很愚蠢的是,我似

  • 我对maven的类加载顺序有一个问题。 我知道,自maven版本2.0.9以来,类加载一直是确定性的,并且在pom中使用顺序。我不清楚传递依赖关系。maven是否首先加载所有顶级依赖项,然后加载传递依赖项。或者加载具有所有传递依赖项的顶级依赖项,然后加载下一个顶级依赖项。 我知道在完全正确的maven设置中,顺序没有问题,但我在依赖项中有一些重复的类,我想知道使用哪一个。排除可传递依赖项是没有选择