Questo sembra un parco giochi ideale per sfruttare l'oggetto Deferred di jQuery.
C'è un grande articolo di Addy Osmani e Julian Aubourg su MSDN qui: http://msdn.microsoft.com/en-us/magazine/gg723713.aspx
insomma, hanno un esempio ci spiega che il modo in cui cache di richieste, questa richiesta, in particolare, verrà memorizzata nella cache per sempre.
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);
};
e quindi risolvere il differita in quanto tale
$.getCachedURL(url).then(successCallback, errorCallback);
quindi se si vuole determinati URL da memorizzare nella cache solo per un certo periodo di tempo siamo in grado di modificare il codice esistente e fare qualcosa sulla falsariga di (nota che questa è la parte superiore della mia testa)
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);
};
e utilizzando un 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)
});
dove callback restituirà i tradizionali jQuery Ajax argomenti successo/errore data
, textStatus
e jqXHR
se si vuole JSON utilizzare $.getJSON
invece di $.get
$.get(url).then(defer.resolve, defer.reject);
$.getJSON(url).then(defer.resolve, defer.reject);
nota che si potrebbe ancora usare appena $.ajax
$.ajax({
url: url,
dataType: 'json',
}).then(defer.resolve, defer.reject);
Impostare le intestazioni della cache sul server per 10 minuti. – epascarello
Sembra che ci siano alcune informazioni vitali mancanti a questa domanda leggendo la risposta di Vincent. Sembra che tu stia effettuando una chiamata AJAX su una risorsa HTML e ti aspetti il risultato come JSON \ -: – hippietrail