2012-01-24 11 views
2

古典的なIEキャッシュとすべてのAjax問題があります。毎分更新するデータがあります。AJAXを使用しているときにキャッシュを消去するクエリーストリングを使わずにhttpレスポンスヘッダーを使用すると、IEキャッシュがクリアされる

フォーラムを調査したところ、これらのオプションは、これらのオプションで沸騰しました(http://stackoverflow.com/questions/5997857/grails-best-way-to-send-cache-headers-with-every-ajax-call) :

  • (のような時間= [タイムスタンプ]?)
  • は、特に代わりAJAX POSTを使用して要求
  • をキャッシュするIEを禁止HTTPレスポンスヘッダを送信するクエリ文字列にキャッシュ無効化トークンを追加GETの

残念ながら、更新されたデータファイルがAkamai Netstorageでホストされており、クエリーストリングを受け入れることができないため、明白なクエリー処理または「キャッシュ:false」設定が機能しません。私もPOSTを使いたくない。

私がしたいのは、特にIEが要求をキャッシュすることを禁止するHTTP応答ヘッダーを送信することです。またはほかの誰かが別のキャッシュ破棄ソリューションを知っている場合はどうしますか?

これはどのように行うことができますか?どんな助けでも大歓迎です。 IEがキャッシュに「同じ」として識別されないように

(function ($) { 
var timer = 0; 
var Browser = { 
    Version: function() { 
     var version = 999; 
     if (navigator.appVersion.indexOf("MSIE") != -1) version = parseFloat(navigator.appVersion.split("MSIE")[1]); 
     return version; 
    } 
} 
$.fn.serviceboard = function (options) { 
    var settings = { "refresh": 60}; 

    return this.each(function() { 
     if (options) $.extend(settings, options); 
     var obj = $(this); 
     GetLatesData(obj, settings.refresh); 
     if (settings.refresh > 9 && Browser.Version() > 6) { 
      timer = setInterval(function() { GetLatestData(obj, settings.refresh) }, settings.refresh * 1000); 
     } 
    }); 
}; 
function GetLatestData(obj, refresh) { 
    var _url = "/path/updated-data.htm"; 
    $.ajax({ 
     url: _url, 
     dataType: "html", 
     complete: function() {}, 
     success: function (data) { 
      obj.empty().append(data);    
      } 
     } 
    }); 
} 
})(jQuery); 

答えて

1

がGETリクエストに乱数を追加します。

は、ここに私のコードです。

new Date().getTime() 

EDITは、おそらく要求されたURLを行います:

var _url = "/path/updated-data.htm?" + new Date().getTime() 

これは私が信じているすべてのエラーが発生することはありません。この数は、タイムスタンプである可能性があります。

EDIT2申し訳ありませんあなたの投稿をちょっと読んだところ、これはあなたにとってはオプションではないことがわかりました。

あなたは「アカマイでホストされていてクエリーストリングを受け入れることはできません」と言いますが、なぜそうではありませんか? htmlでも追加の「?blabla」を受け付けないページについて聞いたことはありません。

+0

私が言及しておかなければならないのは、データファイルがクエリーストリングを許可しないAkamai Netstorageでホストされているということです。 残念ながら、アカマイでクエリ文字列を渡すと、Originサーバーから引き出され、Originに大量のトラフィック負荷がかかるのを避けたいと考えています。 – user1085587

1

これは私を夢中にしていました。私は、多くのキャッシュ・バスト技術とキャッシュ・ヘッダーの設定を試みました。これらの多くはうまくいかなかったか、野生のガチョウの追跡でした。私が正しく動作することをテストした唯一の解決策は、設定していた:

Header Pragma: no-cache 

私はそれがIEの頭痛で他の人を救うことを願っています。

関連する問題