読者です 読者をやめる 読者になる 読者になる

Google GadgetのmakeRequestでキャッシュさせない方法

デバッグ時に値が反映されなくて苦労したのでメモ。

本家のホームページに対策が載っていました。
http://code.google.com/intl/ja/apis/gadgets/docs/remote-content.html

まぁ、GET Requestじゃなくて、POST Requestなら大丈夫だったんだろうけど。

makeRequestの代わりに、makeCachedRequestを使えば大丈夫みたい。

function makeCachedRequest(url, callback, params, refreshInterval) {
  var ts = new Date().getTime();
  var sep = "?";
  if (refreshInterval && refreshInterval > 0) {
    ts = Math.floor(ts / (refreshInterval * 1000));
  }
  if (url.indexOf("?") > -1) {
    sep = "&";
  }
  url = [ url, sep, "nocache=", ts ].join("");
  gadgets.io.makeRequest(url, response, params);
}

少しメモ。
まず、現在の時刻を取得。

dd = new Date();

なので、

ts = new Date().getTime();

は、1970年1月1日0時0分0秒(UTC)からの秒数(ミリ秒単位)を取得するということになるはず。

んで、

Math.floor();

は小数点以下を切り下げた整数値を返すので、refleshintervalに設定した値の間、除算の結果が一定の数値となるので、キャッシュされ、refleshinterval秒以上経過すれば、nocacheパラメータが変わるので、requestがキャッシュされないという仕掛けになっている。