4

jQuery .get() 関数を使用してテンプレート ファイルを読み込み、読み込まれた HTML を特定の DOM 要素をターゲットにしてページの一部に表示します。それはうまく機能しますが、最近、テンプレート ファイルがキャッシュされ、行った変更がマスクされていることに気付きました。

誤解しないでください... 私は次の男と同じくらいキャッシングが好きです。クライアントのキャッシュとサーバー上のファイルにタイムスタンプの違いがない場合にキャッシュしたい。しかし、それは起こっていることではありません。さらに奇妙にするには...同じ関数を使用してテンプレートをロードします...一部のテンプレートファイルは更新をロードし、他のテンプレートファイルはロードしません(最近の変更よりもキャッシュされたバージョンを優先します)。

以下は、私が使用するロード機能です。

function LoadTemplateFile ( DOMlocation , templateFile , addEventsFlag ) {
    $.get( templateFile , function (data) {
        $( DOMlocation ).html(data);
    });
}

どんな助けでも大歓迎です。

新しい詳細: 私はいくつかのデバッグを行ってきましたが、success 関数に返される "data" 変数には新しい情報があることがわかりましたが、DOM に挿入されたものは古いバージョンである理由はまだ明確ではありません。 . これがどのように起こるのかが今私の質問になっています。

4

3 に答える 3

5

通話中にキャッシュをオフに設定できjQuery.get()ます。オプションの詳細については、jQuery.ajax()ドキュメントを参照してください。cache: falseキャッシュがどのように機能するかの詳細はブラウザー固有であるため、特定の呼び出しに対してオンまたはオフにするだけで、その機能を制御できるとは思いません。

参考までに、キャッシュをオフにすると、jQuery は URL の末尾に一意のタイムスタンプ パラメータを追加することでブラウザのキャッシュをバイパスし、以前の URL と一致しないため、キャッシュ ヒットはありません。

おそらく、サーバー上でキャッシュの有効期間やその他のいくつかのキャッシュ パラメータを制御することもできます。これにより、許可するキャッシュの種類をブラウザに指示するさまざまな HTTP ヘッダーが設定されます。アプリを開発するときは、おそらく完全にキャッシュをオフにする必要があります。展開の場合は、それをオンにしてから、アプリを改訂するときにキャッシュを処理する最も安全な方法は、URL を少し変更して、URL の新しいバージョンが異なるようにすることをお勧めします。そうすれば、常に最大のキャッシュを取得できますが、ユーザーはすぐに新しいバージョンを取得できます。

于 2012-05-15T23:12:50.077 に答える
2

$get は、特に IE ではデフォルトで常にキャッシュされます。クエリ文字列を手動で追加するか、ajaxSetup メソッドを使用してキャッシュを破棄する必要があります。

于 2012-05-15T23:15:37.870 に答える
0

別の方法として、jQuery ドキュメントで、デフォルトのキャッシュをオーバーライドできることがわかりました。私にとっては、すべての $.get over を $.ajax 呼び出しに変換する必要はありませんでした。これは、キャッシュの反対のデフォルト動作を持つ $.getScript のように、他のすべてのタイプの呼び出しのデフォルト動作もオーバーライドすることに注意してください: false from $.get.

https://api.jquery.com/jquery.getscript/

  $.ajaxSetup({
    cache: false
  });
于 2016-05-09T20:47:19.087 に答える