通过全局变量缓存jQuery AJAX JSON响应

时间:2014-02-23 01:48:16

标签: jquery ajax caching

我有一个屏幕设计,其中我需要缓存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;
                    }
   }

建议使用全局变量进行缓存作为缓存的替代方法之一?或者这种方法是否有任何问题?

1 个答案:

答案 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;
        });
    };
}());