Este suena como un patio de recreo ideal para aprovechar el objeto diferido de jQuery.
Hay un gran artículo de Addy Osmani y Julian Aubourg en MSDN aquí: http://msdn.microsoft.com/en-us/magazine/gg723713.aspx
en pocas palabras, tienen un ejemplo que hay que explica cómo se almacenan en caché peticiones, esta solicitud en particular, se almacenan en caché para siempre.
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);
};
y luego resolver el diferido como tal
$.getCachedURL(url).then(successCallback, errorCallback);
así que si quieres ciertas direcciones URL que se almacenan en caché para sólo un determinado momento podremos modificar el código existente y hacer algo en la línea de (nota que esta es la parte superior de la cabeza)
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);
};
y el uso de una devolución de llamada:
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)
});
donde devolución de llamada devolverá los argumentos tradicionales de éxito/error jQuery ajax data
, textStatus
y jqXHR
si quieres JSON utiliza $.getJSON
en lugar de $.get
$.get(url).then(defer.resolve, defer.reject);
$.getJSON(url).then(defer.resolve, defer.reject);
nota que aún se podía utilizar sólo $.ajax
$.ajax({
url: url,
dataType: 'json',
}).then(defer.resolve, defer.reject);
Establezca los encabezados de la memoria caché en el servidor durante 10 minutos. – epascarello
Parece que falta información vital en esta pregunta al leer la respuesta de Vincent. Parece que estás haciendo una llamada AJAX a un recurso HTML y esperando el resultado como JSON \ -: – hippietrail