Javascript-脚本加载顺序

Javascript - script load order

本文关键字:顺序 加载 脚本 Javascript-      更新时间:2023-09-26

我有这个代码:

$("#pop_mali_oglas").on('click', function(){
        TINY.box.show({url:'<?php echo base_url()?>form/novi_unos/<?php echo $p ?>'});
        $.getScript("<?php echo JS ?>vendor/jquery.ui.widget.js");
        $.getScript("<?php echo JS ?>tmpl.min.js");
        $.getScript("<?php echo JS ?>load-image.min.js");
        $.getScript("<?php echo JS ?>canvas-to-blob.min.js");        
        $.getScript("<?php echo JS ?>bootstrap.min.js");        
        $.getScript("<?php echo JS ?>bootstrap-image-gallery.min.js");     
        $.getScript("<?php echo JS ?>jquery.iframe-transport.js");
        $.getScript("<?php echo JS ?>jquery.fileupload.js");
        $.getScript("<?php echo JS ?>jquery.fileupload-ip.js");
        $.getScript("<?php echo JS ?>jquery.fileupload-ui.js");
        $.getScript("<?php echo JS ?>locale.js");        
        $.getScript("<?php echo JS ?>main.php");       
        return false;                    
});

第一行是最后加载(TINY.box.show({url:'<?php echo base_url()?>form/novi_unos/<?php echo $p ?>'});),我需要它先加载,然后再加载其余的。我该怎么做?

我猜第二个参数(ajax true|false)默认为true,这就是为什么它看起来是最后加载的。传入0作为第二个参数,以强制其同步。

这些是异步加载的——它们将以加载的任何顺序出现。为了确保一个在其他加载之前加载,最好的方法是加载一个,然后在第一个加载时触发的回调中加载其他的。

类似的东西

$.getScript(first script to load, function(){
    // other get script functions
});


编辑

显然,这与脚本加载无关,而是执行顺序。

第一个tinybox行将首先执行,但是,在其他行执行并返回之后,调用它的结果可能才可见。这可能是由于tinybox命令正在异步加载文件。我上面的答案仍然适用,但您需要了解tinybox如何在异步事件成功完成后执行回调。

问题是所有脚本都是异步加载的,这基本上意味着它们都是同时启动的,这意味着它们很可能会破坏一切。如果您依赖于按顺序加载它们。。

看看过去关于运行函数或任何javascript的方法的答案。

就像tkone在他的例子中显示的那样,该函数将首先运行TINY.box.show函数,然后再运行所有$.getScript函数。

$("#pop_mali_oglas").on('click', function(){
          scriptload(function() {
          getscripts()
          return false; 
        });
});
function scriptload(callback) {
 tinyboxfunc()
 callback();
} 
function tinyboxfunc() {
TINY.box.show({url:'<?php echo base_url()?>form/novi_unos/<?php echo $p ?>'}); 
};
function getscripts() {
            $.getScript("<?php echo JS ?>vendor/jquery.ui.widget.js");
            $.getScript("<?php echo JS ?>tmpl.min.js");
            $.getScript("<?php echo JS ?>load-image.min.js");
            $.getScript("<?php echo JS ?>canvas-to-blob.min.js");        
            $.getScript("<?php echo JS ?>bootstrap.min.js");        
            $.getScript("<?php echo JS ?>bootstrap-image-gallery.min.js");     
            $.getScript("<?php echo JS ?>jquery.iframe-transport.js");
            $.getScript("<?php echo JS ?>jquery.fileupload.js");
            $.getScript("<?php echo JS ?>jquery.fileupload-ip.js");
            $.getScript("<?php echo JS ?>jquery.fileupload-ui.js");
            $.getScript("<?php echo JS ?>locale.js");        
            $.getScript("<?php echo JS ?>main.php"); 
};

您应该在$.getScript:之前设置$.ajaxSetup

 $.ajaxSetup({
  async: false
 });

对于记录,$.getScript()确实是异步执行的,所以在使用它之前先设置它。