Local Ajax cache

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/json2/20130526/json2.js"></script>
<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) {
            //Here is our identifier for the cache. Maybe have a better, safer ID (it depends on the object string representation here) ?
            // on $.ajax call we could also set an ID in originalOptions
            var id = originalOptions.url+ JSON.stringify(originalOptions.data);
            options.cache = false;
            options.beforeSend = function () {
                if (!localCache.exist(id)) {
                    jqXHR.promise().done(function (data, textStatus) {
                        localCache.set(id, data);
                    });
                }
                return true;
            };

        }
    });
    
    $.ajaxTransport("+*", function (options, originalOptions, jqXHR, headers, completeCallback) {

        //same here, careful because options.url has already been through jQuery processing
        var id = originalOptions.url+ JSON.stringify(originalOptions.data);
        
        options.cache = false;

        if (localCache.exist(id)) {
        ...