web-dev-qa-db-ja.com

JQueryでgetJSONのキャッシュをfalseに設定するにはどうすればよいですか?

GetJSONを使用してサーバー側から結果を取得していますが、ブラウザーのキャッシュの問題に直面しています。キャッシュをfalseにしたい。 getJSON呼び出しの直前にこれを使用してみました。

 $.ajaxSetup({
                cache: false
            })

しかし、期待した結果が得られません。まだ古い結果が表示されます。任意の助けをいただければ幸いです。

また、.ajaxを使用するなど、他のソリューションも特定しましたが、実際には使用したくありません。

70
Abhinav

コードを有効にするにはトリガーが必要です。

これにより、将来のすべてのajaxでキャッシュを無効にできます

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

それが役に立てば幸い :)

116
bonesnatch

これを使用して、キャッシュをグローバルに無効にすることができます。

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

または、$.getJSONの代わりに、そのようなリクエストに対してのみキャッシュを無効にします:

$.ajax({
    cache: false,
    url: "/path/to.json",
    dataType: "json",
    success: function(data) {
        ...
    }
});
76
semente

sementeとbonesnatchの答えは正しいですが、$。getJSONなどを使用したい場合はキャッシュを利用します(すべての呼び出しでキャッシュをfalseに設定したくない)が、 1回の呼び出しで、$。getJSON()のデータプロパティにタイムスタンプを挿入できます。リクエストのクエリ文字列に一意の値を追加すると、リクエストは常に一意であり、ブラウザによってキャッシュされません-常に最新のデータを取得できます。

ロングバージョン:

var ts = new Date().getTime();
var data = {_: ts};
var url = '/some/path.json';

$.getJSON(url, data);

すべて1つのバージョンで:

$.getJSON('/some/path', {_: new Date().getTime()});

どちらも次のリクエストになります。

/some/path.json?_=1439315011130 

ここで、末尾の数字はコードが呼び出された瞬間のタイムスタンプであり、常に一意です。

38
TriumphST