này âm thanh như một sân chơi lý tưởng để tận dụng đối tượng Trì hoãn của jQuery.
Có một bài viết tuyệt vời bởi Addy Osmani và Julian Aubourg trên MSDN ở đây: http://msdn.microsoft.com/en-us/magazine/gg723713.aspx
trong ngắn hạn, họ có một ví dụ có giải thích cách chúng lưu trữ các yêu cầu, yêu cầu này đặc biệt sẽ được lưu trữ mãi mãi.
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);
};
và sau đó giải quyết thu nhập hoãn lại như vậy
$.getCachedURL(url).then(successCallback, errorCallback);
vì vậy nếu bạn muốn url nào đó để được lưu trữ trong một thời gian nhất định chúng tôi có thể sửa đổi mã hiện và làm điều gì đó dọc theo dòng (lưu ý rằng đây là ra khỏi đỉnh đầu của tôi)
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);
};
và sử dụng một 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)
});
nơi gọi lại sẽ trở lại với jQuery ajax luận succes/lỗi truyền thống data
, textStatus
và jqXHR
nếu bạn muốn JSON sử dụng $.getJSON
thay vì $.get
$.get(url).then(defer.resolve, defer.reject);
$.getJSON(url).then(defer.resolve, defer.reject);
lưu ý rằng bạn vẫn có thể chỉ cần sử dụng $.ajax
$.ajax({
url: url,
dataType: 'json',
}).then(defer.resolve, defer.reject);
Đặt tiêu đề bộ nhớ cache trên máy chủ trong 10 phút. – epascarello
Dường như có một số thông tin quan trọng còn thiếu trong câu hỏi này bằng cách đọc câu trả lời của Vincent. Dường như bạn đang thực hiện cuộc gọi AJAX trên tài nguyên HTML và mong đợi kết quả dưới dạng JSON \ -: – hippietrail