diff options
| author | Artemy Tregubenko | 2014-01-03 16:22:55 +0100 | 
|---|---|---|
| committer | Igor Minar | 2014-01-08 00:35:19 -0800 | 
| commit | 95e1b2d6121b4e26cf87dcf6746a7b8cb4c25e7f (patch) | |
| tree | 37d147542d5124561aa175cff9ad1dceab5d3a7b | |
| parent | 75345e3487642fbc608c3673e64cd7c5d65cb386 (diff) | |
| download | angular.js-95e1b2d6121b4e26cf87dcf6746a7b8cb4c25e7f.tar.bz2 | |
fix($httpBackend): cancelled JSONP requests will not print error in the console
When you cancel a JSONP request, angular deletes the callback for it. However the script still executes, and since the callback is now deleted and undefined, the script throws an exception visible in the console. The quick fix for this is not to delete the callback, but replace it with `angular.noop`.
Closes #5615
Closes #5616
| -rw-r--r-- | src/ng/httpBackend.js | 2 | ||||
| -rw-r--r-- | test/ng/httpBackendSpec.js | 9 | 
2 files changed, 8 insertions, 3 deletions
| diff --git a/src/ng/httpBackend.js b/src/ng/httpBackend.js index 29f390e0..565e1b12 100644 --- a/src/ng/httpBackend.js +++ b/src/ng/httpBackend.js @@ -54,7 +54,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc          } else {            completeRequest(callback, status || -2);          } -        delete callbacks[callbackId]; +        callbacks[callbackId] = angular.noop;        });      } else { diff --git a/test/ng/httpBackendSpec.js b/test/ng/httpBackendSpec.js index 1be31984..49514d8e 100644 --- a/test/ng/httpBackendSpec.js +++ b/test/ng/httpBackendSpec.js @@ -330,7 +330,7 @@ describe('$httpBackend', function() {          script.onload();        } -      expect(callbacks[callbackId]).toBeUndefined(); +      expect(callbacks[callbackId]).toBe(angular.noop);        expect(fakeDocument.body.removeChild).toHaveBeenCalledOnceWith(script);      }); @@ -397,7 +397,7 @@ describe('$httpBackend', function() {      }); -    it('should abort request on timeout', function() { +    it('should abort request on timeout and replace callback with noop', function() {        callback.andCallFake(function(status, response) {          expect(status).toBe(-1);        }); @@ -406,9 +406,14 @@ describe('$httpBackend', function() {        expect(fakeDocument.$$scripts.length).toBe(1);        expect(fakeTimeout.delays[0]).toBe(2000); +      var script = fakeDocument.$$scripts.shift(), +        callbackId = script.src.match(SCRIPT_URL)[2]; +        fakeTimeout.flush();        expect(fakeDocument.$$scripts.length).toBe(0);        expect(callback).toHaveBeenCalledOnce(); + +      expect(callbacks[callbackId]).toBe(angular.noop);      }); | 
