diff options
| author | Igor Minar | 2013-12-13 01:49:37 -0800 | 
|---|---|---|
| committer | Igor Minar | 2014-01-02 22:04:32 -0800 | 
| commit | 6c17d02bc4cc02f478775d62e1f9f77da9da82ad (patch) | |
| tree | f1bb57a31c541b55fe142d29ff201147a713e2b8 /src | |
| parent | 6a6f71f238d2603cbc286ba29ec7503ad45f7f20 (diff) | |
| download | angular.js-6c17d02bc4cc02f478775d62e1f9f77da9da82ad.tar.bz2 | |
fix($httpBackend): use ActiveX XHR when making PATCH requests on IE8
IE8's native XHR doesn't support PATCH requests, but the ActiveX one does.
I'm also removing the noxhr error doc because nobody will ever get that error.
Closes #2518
Closes #5043
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/httpBackend.js | 20 | ||||
| -rw-r--r-- | src/ngMock/angular-mocks.js | 4 | 
2 files changed, 15 insertions, 9 deletions
| diff --git a/src/ng/httpBackend.js b/src/ng/httpBackend.js index 0bfe2fc3..c72ae4bb 100644 --- a/src/ng/httpBackend.js +++ b/src/ng/httpBackend.js @@ -1,12 +1,12 @@  'use strict'; -var XHR = window.XMLHttpRequest || function() { +function createXhr(method) { +  // IE8 doesn't support PATCH method, but the ActiveX object does    /* global ActiveXObject */ -  try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} -  try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {} -  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {} -  throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest."); -}; +  return (msie <= 8 && lowercase(method) === 'patch') +      ? new ActiveXObject('Microsoft.XMLHTTP') +      : new window.XMLHttpRequest(); +}  /** @@ -28,11 +28,11 @@ var XHR = window.XMLHttpRequest || function() {   */  function $HttpBackendProvider() {    this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { -    return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, $document[0]); +    return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);    }];  } -function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument) { +function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {    var ABORTED = -1;    // TODO(vojta): fix the signature @@ -57,7 +57,9 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument)          delete callbacks[callbackId];        });      } else { -      var xhr = new XHR(); + +      var xhr = createXhr(method); +        xhr.open(method, url, true);        forEach(headers, function(value, key) {          if (isDefined(value)) { diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index d11ef0c1..fb7ef057 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -1572,6 +1572,10 @@ function MockHttpExpectation(method, url, data, headers) {    };  } +function createMockXhr() { +  return new MockXhr(); +} +  function MockXhr() {    // hack for testing $http, $httpBackend | 
