diff --git a/src/ng/http.js b/src/ng/http.js index f76f1cff25b8..6e493b069a7f 100644 --- a/src/ng/http.js +++ b/src/ng/http.js @@ -892,7 +892,7 @@ function $HttpProvider() { if (cache) { cachedResp = cache.get(url); - if (cachedResp) { + if (cachedResp || typeof cachedResp === 'string') { if (cachedResp.then) { // cached request has already been sent, but there is no response yet cachedResp.then(removePendingReq, removePendingReq); @@ -912,7 +912,7 @@ function $HttpProvider() { } // if we won't have the response in cache, send the request to the backend - if (!cachedResp) { + if (!cachedResp && typeof cachedResp !== 'string') { $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, config.withCredentials, config.responseType); } diff --git a/test/ng/httpSpec.js b/test/ng/httpSpec.js index ec1cb7f1cb2c..d3653a67ee7d 100644 --- a/test/ng/httpSpec.js +++ b/test/ng/httpSpec.js @@ -1248,6 +1248,20 @@ describe('$http', function() { }); + it('should allow the cached value to be an empty string', function () { + cache.put('/abc', ''); + + callback.andCallFake(function (response, status, headers) { + expect(response).toBe(''); + expect(status).toBe(200); + }); + + $http({method: 'GET', url: '/abc', cache: cache}).success(callback); + $rootScope.$digest(); + expect(callback).toHaveBeenCalled(); + }); + + it('should default to status code 200 and empty headers if cache contains a non-array element', inject(function($rootScope) { cache.put('/myurl', 'simple response');