Local Ajax cache

HTML

<input type='button' value='request' id='ajaxButton' />

JavaScript

var localCache = {
        /**
         * timeout for cache in millis
         * @type {number}
         */
        timeout: 30000,
        /** 
         * @type {{_: number, data: {}}}
         **/
        data: {},
        remove: function (url) {
            delete localCache.data[url];
        },
        exist: function (url) {
            return !!localCache.data[url] && ((new Date().getTime() - localCache.data[url]._) < localCache.timeout);
        },
        get: function (url) {
            console.log('Getting in cache for url' + url);
            return localCache.data[url].data;
        },
        set: function (url, cachedData, callback) {
            localCache.remove(url);
            localCache.data[url] = {
                _: new Date().getTime(),
                data: cachedData
            };
            if ($.isFunction(callback)) callback(cachedData);
        }
    };

    $.ajaxPrefilter(function (options, originalOptions, jqXHR) {
        if (options.cache) {
            var complete = originalOptions.success || $.noop,
                url = originalOptions.url;
            options.cache = false;
            options.beforeSend = function () {
                if (localCache.exist(url)) {
                    complete(localCache.get(url));
                    return false;
                }
                return true;
            };
            options.success = function (data, textStatus) {
                localCache.set(url, data, complete);
            };
        }
    });

    $(function () {
        var url = '/echo/jsonp/';
        $('#ajaxButton').click(function (e) {
            $.ajax({
                url: url,
                data: {
                    test: 'value'
                },
                cache: true,
                success: function (data) {
                    console.log(data);
                }
            });
        });
    });