でキャッシュ時間を変更し、私が知りたい は$.ajax()
のキャッシュ時間を変更する方法はありますか? たとえば、ajaxが10分で要求した場合、jqueryは前のデータをロードしますが、10分後に要求された場合は新しいデータをロードします。はjqueryの
UPDATE:
我々はJSONデータをキャッシュする必要があるので、私は
でキャッシュ時間を変更し、私が知りたい は$.ajax()
のキャッシュ時間を変更する方法はありますか? たとえば、ajaxが10分で要求した場合、jqueryは前のデータをロードしますが、10分後に要求された場合は新しいデータをロードします。はjqueryの
UPDATE:
我々はJSONデータをキャッシュする必要があるので、私は
jQueryのは、実際にあなたのための要求をキャッシュしませんJSONデータ型でのAjaxを使用する必要があります - あなたはfalse
にcache
を設定すると、それだけでセットブラウザーやプロキシがキャッシュされた応答を返さないようにするために、いくつかのヘッダーと "cache buster"クエリ文字列変数(例:?_=487262189472
)を渡します。
キャッシングを10分にするには、自分で実装するのが簡単です。例えば、
var cacheBuster = new Date().getTime();
setInterval(function() {
cacheBuster = new Date().getTime();
}, 1000 * 60 * 10)
は、単にあなたの要求(例えば、?_noCache=<cacheBuster>
)にクエリ文字列変数にこれを追加します。
編集:
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
var startChar = options.url.indexOf('?') === -1 ? '?' : '&';
options.url += startChar + '_noCache=' + cacheBuster;
});
実際にはうまくいかず、依然としてサーバーに新しい要求をフェッチするケースを知っていますか? – vsync
これを:このより完全なソリューションを作るために、ここであなたは透過的に、実際のAjax呼び出しに対するすべてのjQueryのAjaxリクエストにcacheBuster
を使用する方法の例ですjQueryのDeferredオブジェクトを活用するための理想的な遊び場のようなものです。ここでは、MSDNのアディOsmaniとジュリアンAubourgによって素晴らしい記事があります
:短期でhttp://msdn.microsoft.com/en-us/magazine/gg723713.aspx
が、彼らは特に、この要求は永遠にキャッシュされます、彼らは要求をキャッシュする方法について説明しそこに例があります。その後、
var cachedPromises = {};
$.getCachedURL = function(url, callback) {
if (!cachedPromises[ url ]) {
cachedPromises[ url ] = $.Deferred(function(defer) {
$.get(url).then(defer.resolve, defer.reject);
}).promise();
}
return cachedPromises[ url ].done(callback);
};
、あなたは、特定のURLのみを一定時間キャッシュすることにしたいのであれば、我々は既存のコードを変更し、(ノートの線に沿って何かを行うことができ、そのような
$.getCachedURL(url).then(successCallback, errorCallback);
として繰延を解決
var callback = function() {
console.log('callback', arguments)
}
var cacheTime = 3600;
$.getCachedURL('/dynamic/config', callback, cacheTime).then(function()
{
console.log('success', arguments)
}, function()
{
console.log('error', arguments)
});
01:これは私の頭の上)
var cachedPromises = {};
var cachedTimeouts = {};
$.getCachedURL = function(url, callback, cacheTime) {
if (!cachedPromises[ url ]) {
cachedPromises[ url ] = $.Deferred(function(defer) {
$.get(url).then(defer.resolve, defer.reject);
}).promise();
cachedTimeouts[ url ] = setTimeout(function() {
clearTimeout(cachedTimeouts[ url ]);
delete cachedPromises[ url ];
}, cacheTime);
}
return cachedPromises[ url ].done(callback);
};
、コールバック関数を使用してオフになっていることあなたはJSONは、あなたはまだちょうど$.ajax
$.getJSON
代わりの
$.get
$.get(url).then(defer.resolve, defer.reject);
$.getJSON(url).then(defer.resolve, defer.reject);
ノートを使用したい場合は、コールバックは
に伝統的なjQueryのAjaxの大成功/エラー引数data
、textStatus
とjqXHR
を返します
$.ajax({
url: url,
dataType: 'json',
}).then(defer.resolve, defer.reject);
サーバー上のキャッシュヘッダーを10分間設定します。 – epascarello
Vincentの答えを読んで、この質問に欠けている重要な情報があるようです。あなたはHTMLリソース上でAJAX呼び出しを行い、その結果をJSONとして期待しているようです - : – hippietrail