2

我有这个代码:

$("#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 ?>'});),我需要先加载它,然后再加载其余部分。我怎样才能做到这一点?

4

4 回答 4

2

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

于 2012-04-04T11:58:52.260 回答
1

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

查看过去关于运行函数或任何 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"); 
};
于 2012-04-04T11:57:11.403 回答
1

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

就像是

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


编辑

显然这不是关于脚本加载而是执行顺序。

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

于 2012-04-04T11:57:12.433 回答
-1

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

 $.ajaxSetup({
  async: false
 });

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

于 2012-04-04T12:19:15.147 回答