From 1100bddbdcec50676ba0be10129a20e1d6cdfd7d Mon Sep 17 00:00:00 2001 From: Ben Lesh Date: Wed, 6 Jan 2016 17:16:05 -0800 Subject: [PATCH] fix(ajax): ensure that headers are set properly --- spec/observables/dom/ajax-spec.js | 22 ++++++++++++++++++++++ src/observable/dom/ajax.ts | 13 ++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/spec/observables/dom/ajax-spec.js b/spec/observables/dom/ajax-spec.js index c84d05e3d3..4373906df7 100644 --- a/spec/observables/dom/ajax-spec.js +++ b/spec/observables/dom/ajax-spec.js @@ -15,6 +15,28 @@ describe('Observable.ajax', function () { jasmine.Ajax.uninstall(); }); + it('should set headers', function () { + Rx.Observable.ajax({ + url: '/talk-to-me-goose', + headers: { + 'Content-Type': 'kenny/loggins', + 'Fly-Into-The': 'Dangah Zone!', + 'Take-A-Ride-Into-The': 'Danger ZoooOoone!' + } + }) + .subscribe(); + + var request = jasmine.Ajax.requests.mostRecent(); + + expect(request.url).toBe('/talk-to-me-goose'); + expect(request.requestHeaders).toEqual({ + 'Content-Type': 'kenny/loggins', + 'Fly-Into-The': 'Dangah Zone!', + 'Take-A-Ride-Into-The': 'Danger ZoooOoone!', + 'X-Requested-With': 'XMLHttpRequest' + }); + }); + it('should have an optional resultSelector', function () { var expected = 'avast ye swabs!'; var result; diff --git a/src/observable/dom/ajax.ts b/src/observable/dom/ajax.ts index acb850acfc..0593564cb1 100644 --- a/src/observable/dom/ajax.ts +++ b/src/observable/dom/ajax.ts @@ -182,7 +182,7 @@ export class AjaxSubscriber extends Subscriber { private send(): XMLHttpRequest { const { request, - request: { user, method, url, async, password } + request: { user, method, url, async, password, headers } } = this; const createXHR = request.createXHR; const xhr = tryCatch(createXHR).call(request); @@ -209,6 +209,9 @@ export class AjaxSubscriber extends Subscriber { xhr.timeout = request.timeout; xhr.responseType = request.responseType; + // set headers + this.setupHeaders(xhr, headers); + // now set up the events this.setupEvents(xhr, request); @@ -217,6 +220,14 @@ export class AjaxSubscriber extends Subscriber { } } + private setupHeaders(xhr: XMLHttpRequest, headers: Object) { + for (let key in headers) { + if (headers.hasOwnProperty(key)) { + xhr.setRequestHeader(key, headers[key]); + } + } + } + private setupEvents(xhr: XMLHttpRequest, request: AjaxRequest) { const progressSubscriber = request.progressSubscriber;