2011-07-14 2 views
4

私はデータを取得するためのAJAXリクエストを行うページを持っています。 iPadを使用している場合、ユーザーが変更を加えた後、ページから離れて戻ってくる - AJAXリクエストは再実行されない - 古いデータがロードされていることを意味する(おそらくiPadのブラウザキャッシュから)。iPadは「No Store」を設定しているにもかかわらずAJAXレスポンスをキャッシュします

私のサーバーコードは、ASP.NETフォームであり、私は私が見つけることができるすべての設定を何もキャッシュを設定していない試してみました:

Context.Response.Cache.SetNoStore() 
Context.Response.Cache.SetETag(New Guid().ToString()) 
Context.Response.Cache.SetExpires(New DateTime()) 
Context.Response.Cache.SetNoServerCaching() 
Context.Response.Cache.SetCacheability(HttpCacheability.NoCache) 
Context.Response.Expires = 0 

しかし、運。何か案は?

+0

可能であれば、GETではなくPOSTを使用することを検討してください。 – vcsjones

+0

ああ、面白い、感謝vcsjones。 –

+0

POSTは役に立たないかもしれません... http://stackoverflow.com/questions/12506897/is-safari-on-ios-caching-ajax-results – meshy

答えて

5

前の回答で提案されているように、それは$.ajax methodだため、jQueryのは簡単なオプションにキャッシュを提供しています。

falseに設定され、それが ブラウザによってキャッシュされないように要求されたページを強制的になります。 cacheをfalseに設定すると、クエリ文字列パラメータ "_ = [TIMESTAMP]"がURLに追加されます。例えばので

$.ajax({ 
    url: "test.html", 
    cache: false, 
    success: function() { 
    $(this).addClass("done"); 
    } 
}); 

あなたがあなた自身に似た動作を実装することができますjQueryのを使用していない場合。

+0

+1非常に興味深い。私はすでに私の答えに記載されている解決策を使用していますが、もし私がこれをやり直すなら(私は* jQueryを使うことを考えています)、私は間違いなくこの答えを使用します。 –

+0

この回答はiOS 6では動作しません。こちらをご覧ください:http://stackoverflow.com/questions/12506897/is-safari-on-ios-6-caching-ajax-results –

0

私の現在の修正は常に(わずかに)AJAXリクエストのURLを変更することです:クエリ文字列は、同じWebメソッドに毎回渡され

url: "/AjaxService.asmx/" + methodName + "?dt=" + new Date().getTime() 

ので、私はそれは価値が、Safariの無視することができますは常に異なるアドレスにあるため結果をキャッシュできません。

確かにこれは最適な解決策ではありません。

+0

これは非常に一般的な解決策です。私の本では'GET'を' POST'で置き換えるよりはるかに良いでしょう。 –

+0

私はそれが一般的だったことを認識していませんでした。安心してくれてありがとう:) –

+0

@Vasiliy Faronov:GETの代わりにPOSTを使う理由はたくさんあります。いくつか挙げると、1)データを渡す場合、GETはクエリ文字列にパラメータを置きます。これはUnicode/UTF-8テキストをうまく扱わないか、少なくとも一様に扱います。サーバーは通常、キリル文字のようなものをURLでうまく処理しません。 POSTにはその制限はありません。 2)キャッシュしたくない場合。他の多くの人たち...今、GETが悪いと言っているわけではありません。 POSTを使用する理由はたくさんあります。 – vcsjones

関連する問題