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

2 番目のパラメーター (ajax true|false) のデフォルトは true であると推測しているため、最後にロードしているように見えます。強制的に同期させるには、2 番目のパラメーターとして 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

これらは非同期にロードされます -- ロードする順序に関係なく表示されます。残りのロードよりも前に 1 つがロードされていることを確認するには、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 に答える