1

これがjQueryの一般的な問題であるかどうか疑問に思っていました$.getScript()か? この機能を使用する JS スクリプトがあります。

私のJSファイルは非常に長く、スクリプト全体を投稿するのは良い考えではないと思うので、これが一般的な問題かどうか知りたいですか?

ボタンを押した後に実行される $.ajax 関数があります

$.ajax({
   url: thisURL,
   type: "POST",
   crossDomain:true,
   data: searliziedData
}).done(function(data){

var jsPaths = ["http://www.mysite.com/js/jquery.jscrollpane.min.js","http://www.mysite.com/js/jquery.hoverIntent.minified.js","http://www.mysite.com/js/jquery.mousewheel.js","http://www.mysite.com/js/image_contents.js"];
$.each(jsPaths, function(i, jsPath) {
    $.getScript(jsPath);
});

   // do something
});

そのため、ボタンを2 回押すまで、スクリプトはサイトに挿入されません。また、$.ajax の前に $.getScript コードを挿入しようとしましたが、2 回目に押すまで実行されません。

このコードからエラーや何も発生しません。

また、 $.each() 関数内に `alert("test") を配置し、それが実行されます。

スクリプトが実行されていないことをどのように知ることができますか? 私は Google Chrome の inspect 要素を使用しており、リソースの下で、サイトで実行されているスクリプトを確認できます。

ご協力いただきありがとうございます!

4

1 に答える 1

0

キャッシュをクリアした後、最初のページの読み込みで動作しないという問題が発生するたびにgetScript()(または最初の読み込みでのみ動作する場合)、それは何かが間違っているためです。

ここで少し単純化しすぎます。前回これに遭遇したとき、<body>要素に特定のクラスがあるかどうかを確認していましたが、<body>タグ自体の前にスクリプトを呼び出していました。最初のロードgetScript()では実行されませんが、ドキュメントがキャッシュされているため、2 回目のロードでは実行されます。この場合、問題は に固有のものgetScript()ではなく、キャッシュのしくみです。

もう 1 つの一般的な問題は、スクリプトの依存関係です。たとえば、次のようにします。

$.getScript('plugin.js');
$.getScript('developers.js');

developers.jsが のプラグイン機能などに依存している場合、よりも速くダウンロードされて最初に実行されたため、実行に失敗するplugin.js可能性が高い場合があります。developers.jsplugin.js

これに対する解決策は次のようになります。

$.getScript('plugin.js').done(function(){
    $.getScript('developers.js');
});

JS ファイルが非常に大きいとのことで、これが一般的な問題かどうかを尋ねられました。私はそう言うでしょう。多くのことが行われている場合、スクリプト相互および HTML ドキュメントとの関連で、スクリプトの実行順序を見落としがちです。これは、依存関係がないかどうかを確認するためにデバッグする必要がある問題です。

于 2014-06-17T16:17:42.187 に答える