cachedGet only submits the request if it hasn't seen a response to that same request. Otherwise it re-uses the previous response. Note that the first two requests for 'services/random' still get different answers, though, because the second goes back before the first response returns. The final request might get one of these same two answers, if the five-second delay is long enough for one of the first two requests to return.

Results

var gRequestCache = {};
$.cachedGet = function(url, k) {
    if (url in gRequestCache)
        k(gRequestCache[url], 'success');
    else
        $.get(url, adviseBefore(k, function(result, status) {
            if (status == 'success')
                gRequestCache[url] = result;
        }));
};
$.cachedGet('services/random', log); $.cachedGet('services/random', log); $.cachedGet('services/echo/1', log); $.cachedGet('services/echo/2', log); setTimeout(function() {$.cachedGet('services/random', log);}, 5000);