1

2 つの JavaScript ファイルがあります。

  1. scripts.js - すべてのonloadセットアップ作業を行い、イベント ハンドラーをコントロールにアタッチします。
  2. map.js -MAPウィジェットを定義します

ドキュメントが読み込まれると、MAPscripts.js は map.js を読み込んで を呼び出してオブジェクトを初期化しinitMapます。

/** ON DOCUMENT LOAD **/
$(document).ready(function() {

  $.getScript('lib/map.js', function() {
    /** Generate a new map **/
    MAP = initMap(10,mapDefault);
  });

ユーザーがマップを再生成できるようにするボタンがあり、これも を呼び出しますinitMap。例えば:

$('input#regenerateButton').click(function() {
  $.getScript('lib/map.js', function() {
    MAP = initMap($('input#mapSize').val(),mapDefault);
  });
});

この時点で既にロードされている可能性が高いため、スクリプト map.js を再度ロードする必要がありますか?

この質問は以前に尋ねられましたが、への複数の呼び出しに関する部分は回答されていないと思います$.getScript

4

1 に答える 1

2

デフォルトでは、$.getScript()関数はキャッシュを破壊します。つまり、実行されるたびにファイルが再度取得されます。これは、js ファイルが静的な js ファイルではない場合、つまり、セッションで利用可能な他のデータに従ってデータをカスタマイズするサーバー側コード (PHP など) が含まれている場合にのみ役立ちます。

あなたが持っているように見える静的なjsファイルを持っている場合は、次のようにしてこの動作を無効にすることができます

$.ajaxSetup({
  cache: true
});

(ただし、これはすべての ajax 呼び出しに対してグローバルであることに注意してください)。

$.getScript()スクリプトが静的ファイルの場合は、別のスクリプトで再読み込みする必要はありません。また、再読み込みしない場合は、AJAX キャッシュを有効にする必要もありません。

ただし、静的であってもスクリプトをリロードする必要がないという例外が 1 つありますinitMap。これは悪い設計ですが、スクリプトではそうなる可能性があります。

于 2013-04-19T10:41:02.497 に答える