トップ «前の日記(2008-06-23) 最新 次の日記(2008-06-26)» 編集

Ussy Diary


2008-06-25

[JavaScript]IE で jQuery の Ajax リクエストをキャッシュさせない

IE で Ajaxリクエストをキャッシュさせない を jQuery で行う必要がありました。調べてみるといくつかサンプルがありましたが、初期化時に下のコードを呼び出すのが一番シンプルでした。

$.ajaxSetup({ ifModified: true });

タイムスタンプをパラメータにつける方法だとキャッシュが無駄にできてしまう問題があって、あくまでファイルを更新したときにキャッシュしたファイルを読み込ませない目的として使わないと駄目。

jQuery のコードを ifModified で追ってみました。 jQuery の ajax 関数内のコードで下の処理を行っています。なお ajax 関数は get/post/getScript/getJSON 関数で呼ばれているので最終的に Ajax を実行する関数と考えて間違いなさそうです。

// Set the If-Modified-Since header, if ifModified mode.
if ( s.ifModified )
    xml.setRequestHeader("If-Modified-Since",
    jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );

ifModified が有効な値であれば 前回変更時刻、キャッシュがなければ最低日時を設定しています。

この s 変数はこのコードの少し前に

s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));

と処理を行っていて ajaxSettings をマージしています。ajaxSettings 変数は想像通り ajaxSetup 関数でマージしたものが渡されていました。

こうして追ってみるとなるほどーと思うことがあるわけで、時間を取って以前ブクマした jquery.js を読み解くをしっかり読んでおきたいなあとまた思いました。