緩存時間,如果我們在$.ajax()
通過true
爲cache
jQuery的將緩存加載數據, 我想知道有沒有辦法改變的緩存時間$.ajax()
? 例如,如果ajax在10分鐘內請求jquery加載以前的數據,但如果10分鐘後請求加載新鮮數據。更改jQuery中
UPDATE:
我們需要緩存JSON數據,所以我應該在JSON數據類型使用Ajax
緩存時間,如果我們在$.ajax()
通過true
爲cache
jQuery的將緩存加載數據, 我想知道有沒有辦法改變的緩存時間$.ajax()
? 例如,如果ajax在10分鐘內請求jquery加載以前的數據,但如果10分鐘後請求加載新鮮數據。更改jQuery中
UPDATE:
我們需要緩存JSON數據,所以我應該在JSON數據類型使用Ajax
jQuery的不實際緩存您的要求 - 當您設置cache
到false
,它只是設置某些標題並傳遞「緩存攔截器」查詢字符串變量(例如,?_=487262189472
)以防止瀏覽器或任何代理返回緩存的響應。
如果你想要10分鐘的緩存,你可以很容易地實現你自己的。例如,
var cacheBuster = new Date().getTime();
setInterval(function() {
cacheBuster = new Date().getTime();
}, 1000 * 60 * 10)
然後,只需添加一個查詢字符串變量您的要求(例如,?_noCache=<cacheBuster>
)。
編輯:爲使之成爲一個更完整的解決方案的緣故,這裏是你如何使用所有的jQuery Ajax請求透明的實際Ajax調用的cacheBuster
一個例子:
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
var startChar = options.url.indexOf('?') === -1 ? '?' : '&';
options.url += startChar + '_noCache=' + cacheBuster;
});
你是否知道哪些情況不會真正起作用,並且仍然會向服務器提取新請求? – vsync
這聽起來像利用jQuery的Deferred對象的理想場所。
有一個偉大的文章阿迪·奧斯馬尼和朱利安Aubourg MSDN上的位置: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 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);
};
,並使用一個回調:
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)
});
哪裏回調將返回傳統的jQuery AJAX更迭/錯誤論點data
,textStatus
和jqXHR
如果你想JSON
使用$.getJSON
代替$.get
$.get(url).then(defer.resolve, defer.reject);
$.getJSON(url).then(defer.resolve, defer.reject);
請注意,您仍然可以只使用$.ajax
$.ajax({
url: url,
dataType: 'json',
}).then(defer.resolve, defer.reject);
將服務器上的緩存標頭設置爲10分鐘。 – epascarello
通過閱讀文森特的答案,似乎有一些重要的信息從這個問題中消失了。看起來你正在對HTML資源進行AJAX調用並期望得到的結果爲JSON \ - : – hippietrail