我有一个屏幕设计,其中我需要缓存AJAX JSON响应,以便我可以使用相同的数据进行进一步的请求。屏幕设计显示支付的历史数据,其中用户可以操纵日期范围。因此,最初的呼叫将我收回过去10年的全部数据。稍后当用户修改日期范围时,我希望通过缓存数据进行处理。
我不打算使用客户端存储,因为它们不太安全。相反,我想检查是否可以在第一次调用后使用全局变量来存储JSON响应,然后对于后来的连续调用,我可以从全局变量而不是另一个服务器调用中获取数据。
//check whether the global variable is null or not
if($pymntHistData == null)
{
$.ajax({
type: 'POST',
dataType: 'JSON',
url: 'PaymentHistory/_PaymentHistoryPartial',
data: {
fromDate: fromDate,
toDate: toDate
},
success: function(data) {
//store the response data in a global variable
$pymntHistData = data;
}
}
建议使用全局变量进行缓存作为缓存的替代方法之一?或者这种方法是否有任何问题?
答案 0 :(得分:0)
你可以做到这一点,但更好的方法是使用promises并隐藏函数后面的数据。然后该函数可以处理缓存
想象一下,将Ajax调用放在函数getData
中,该函数返回一个promise:
var getData = function() {
return $.ajax(...);
};
然后您可以使用
调用该函数getData().then(function(data) {
/* do something with data */
});
并且回调完全不知道数据是从服务器实际获取还是从其他地方获取。
现在我们可以在不影响调用者和实现缓存的情况下更改getData
的实现:
var getData = (function() {
var cache;
return function() {
if (cache) {
return (new $.Deferred()).resolve(cache).promise();
}
return $.ajax(...).then(function(response) {
cache = response;
});
};
}());