URLRequestを使ってサーバーからデータを取得する時に問題となるのがキャッシュ。
これswfでもAIRでも同様の大問題です。
GET, POSTなどでパラメタを変更してリクエストしているのに毎回同じ値が返ってきてしまいます。
AIRには cacheResponse, useCache
といかにも使えそうなプロパティが用意されているのですが、false
設定してもやっぱりキャッシュされます。
header に "no-cache"
を追加してもキャッシュされてしまいます。
var req:URLRequest = new URLRequest('examle.com'); var header:URLRequestHeader = new URLRequestHeader("pragma", "no-cache"); var headerCacheCtrl:URLRequestHeader = new URLRequestHeader("cache-control", "no-chache"); var headerExpires:URLRequestHeader = new URLRequestHeader("expires", "Sun, 10 Jan 1990 01:01:01 GMT"); req.requestHeaders.push(header); req.requestHeaders.push(headerCacheCtrl); req.requestHeaders.push(headerExpires); |
リクエストにタイムスタンプも追加してるのになぜなぜ?と右脳と左脳をフル回転させました。
タイムスタンプの設定をしくじっておりました。
【キャッシュされてしまうタイムスタンプ設定】
var req:URLRequest = new URLRequest('examle.com'); var variables:URLVariables = new URLVariables(); variables.timestamp = new Date().getTime().toString(); req.data = variables; |
【キャッシュされないタイムスタンプ設定】
var req:URLRequest = new URLRequest('examle.com' + '?' + new Date().getTime().toString()); |
解決すればなんてことない勘違い。
URLそのものにタイムスタンプを付加しないといけませんよねぇ。
以前はどうしてたんだろうとコードをあさってみたらちゃ〜んとURLにくっ付けてました。
なんで今回だけ勘違いしてたんかんなぁ。
ちなみにURLにタイムスタンプをつけたら cacheResponse, useCache
も "no-cache"
もいりません。
いましめのためにブログっておきます。