ten brzmi jak idealny plac zabaw do wykorzystania obiektu odroczonego jQuery.
Jest to świetny artykuł Addy Osmani i Juliana Aubourg na MSDN tutaj: http://msdn.microsoft.com/en-us/magazine/gg723713.aspx
w skrócie, mają one przykład tam, który wyjaśnia, w jaki sposób buforowania żądań, to żądanie w szczególności będą buforowane na zawsze.
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);
};
a następnie rozwiązać odroczonego jako taki
$.getCachedURL(url).then(successCallback, errorCallback);
więc jeśli chcesz niektóre adresy mają być buforowane tylko przez pewien czas możemy zmodyfikować istniejący kod i zrobić coś wzdłuż linii (uwaga że jest z góry na głowie)
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);
};
i stosując 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)
});
gdzie zwrotna powróci tradycyjne jQuery ajax argumenty sukces/błędach data
, textStatus
i jqXHR
jeśli chcesz JSON używać $.getJSON
zamiast $.get
$.get(url).then(defer.resolve, defer.reject);
$.getJSON(url).then(defer.resolve, defer.reject);
zauważyć, że można jeszcze po prostu użyć $.ajax
$.ajax({
url: url,
dataType: 'json',
}).then(defer.resolve, defer.reject);
Ustaw nagłówki pamięci podręcznej na serwerze na 10 minut. – epascarello
Wydaje się, że brakuje pewnych istotnych informacji na ten temat, czytając odpowiedź Vincenta. Wygląda na to, że wykonujesz wywołanie AJAX na zasobie HTML i spodziewasz się wyniku w postaci JSON \:: – hippietrail