0

次のようにスクリプトタグを介して挿入されたページにjavascriptファイル(initial.js)がありました:

<script src="initial.js"></script> 

このファイルは dom 要素 (たとえば 2 つのリンク) を作成し、jQuery ajax メソッドを介して別の jQuery プラグイン (plugin.js) を非同期的にロードします。これら 2 つのリンクをクリックすると、jQuery プラグイン (plugin.js) からモジュールが表示されます。

次に、JavaScript ファイル (initial.js) が変更され、スクリプト タグではなく jQuery ajax を介して非同期的にページに読み込まれました。これにより、一部のイベントが断続的にリンクに接続されず、プラグインが呼び出されなくなりました。

ブラウザが非同期スクリプトを独自の順序でロードしているため、リンクが断続的にプラグインを起動できないと思います。この新しいセットアップでこの問題を解決するための指針はありますか?

4

2 に答える 2

0

大まかに言えば、 require.jsのようなものを調べる必要があると思います。または、呼び出しのロードイベントをリッスンできるjQueryイベント処理コードを調べることもできます。これは、次のスクリプトをロードする前に、あるスクリプトがいつロードされたかを判断するのに役立ちます。

于 2012-11-05T22:08:42.030 に答える
0

おそらく、過去に次のようなことを試したことがあるでしょう。

var output;
$.get('data.php',function(data){
    output=data;
});
alert(output);

Javascript は次のコードに移る前に AJAX 呼び出しが返されるのを待機しないため、未定義のエラーが発生します。

スクリプトについても同じことが言えます。複数のスクリプトに対して複数の呼び出しを行うと、おそらく最小のスクリプトが最も速く返され、そのスクリプトが実行されます。10kb のスクリプトをロードしてから 1kb のスクリプトをロードすると、10kb スクリプトの後に呼び出されたとしても、1kb スクリプトがおそらく最も速く返され、実行されます。

これを修正するには、キュー システムを作成し、前のスクリプトが読み込まれた後にのみ各スクリプトを読み込むことができます。

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

$(document).ready(function(){
    loadScript();
});

function loadScript(){
    if(sendQueue.length==0)
        return;
    $.getScript(scripts[0],function(){
        scripts=scripts.slice(1);
        loadScript();
    });
}

しかし、スクリプト内からスクリプト内からスクリプトをロードしている場合...非常にインセプションのように、これはまだ機能しない可能性があります。

于 2012-11-05T22:19:54.387 に答える