diff --git a/spec/observables/dom/ajax-spec.ts b/spec/observables/dom/ajax-spec.ts index 08198c6bbd..444d146e36 100644 --- a/spec/observables/dom/ajax-spec.ts +++ b/spec/observables/dom/ajax-spec.ts @@ -440,39 +440,66 @@ describe('Observable.ajax', () => { expect(complete).to.be.true; }); - describe('ajax.post', () => { - it('should succeed on 200', () => { - const expected = { foo: 'bar', hi: 'there you' }; - let result: Rx.AjaxResponse; - let complete = false; - - Rx.Observable - .ajax.post('/flibbertyJibbet', expected) - .subscribe(x => { - result = x; - }, null, () => { - complete = true; - }); - - const request = MockXMLHttpRequest.mostRecent; - - expect(request.method).to.equal('POST'); - expect(request.url).to.equal('/flibbertyJibbet'); - expect(request.requestHeaders).to.deep.equal({ - 'X-Requested-With': 'XMLHttpRequest', - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' + it('should able to select json response via getJSON', () => { + const expected = { foo: 'bar' }; + let result; + let complete = false; + + Rx.Observable + .ajax.getJSON('/flibbertyJibbet') + .subscribe(x => { + result = x; + }, null, () => { + complete = true; }); - request.respondWith({ - 'status': 200, - 'contentType': 'application/json', - 'responseText': JSON.stringify(expected) + const request = MockXMLHttpRequest.mostRecent; + + expect(request.url).to.equal('/flibbertyJibbet'); + + request.respondWith({ + 'status': 200, + 'contentType': 'application/json', + 'responseText': JSON.stringify(expected) + }); + + expect(result).to.deep.equal(expected); + expect(complete).to.be.true; + }); + }); + + describe('ajax.post', () => { + it('should succeed on 200', () => { + const expected = { foo: 'bar', hi: 'there you' }; + let result: Rx.AjaxResponse; + let complete = false; + + Rx.Observable + .ajax.post('/flibbertyJibbet', expected) + .subscribe(x => { + result = x; + }, null, () => { + complete = true; }); - expect(request.data).to.equal('foo=bar&hi=there%20you'); - expect(result.response).to.deep.equal(expected); - expect(complete).to.be.true; + const request = MockXMLHttpRequest.mostRecent; + + expect(request.method).to.equal('POST'); + expect(request.url).to.equal('/flibbertyJibbet'); + expect(request.requestHeaders).to.deep.equal({ + 'X-Requested-With': 'XMLHttpRequest', + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' + }); + + request.respondWith({ + 'status': 200, + 'contentType': 'application/json', + 'responseText': JSON.stringify(expected) }); + + expect(request.data).to.equal('foo=bar&hi=there%20you'); + expect(result.response).to.deep.equal(expected); + expect(complete).to.be.true; }); }); }); \ No newline at end of file diff --git a/src/observable/dom/AjaxObservable.ts b/src/observable/dom/AjaxObservable.ts index c82c8dfef8..84f815fbe1 100644 --- a/src/observable/dom/AjaxObservable.ts +++ b/src/observable/dom/AjaxObservable.ts @@ -4,6 +4,7 @@ import {errorObject} from '../../util/errorObject'; import {Observable} from '../../Observable'; import {Subscriber} from '../../Subscriber'; import {TeardownLogic} from '../../Subscription'; +import {MapOperator} from '../../operator/map'; export interface AjaxRequest { url?: string; @@ -66,7 +67,7 @@ export interface AjaxCreationMethod { post(url: string, body?: any, headers?: Object): Observable; put(url: string, body?: any, headers?: Object): Observable; delete(url: string, headers?: Object): Observable; - getJSON(url: string, resultSelector?: (data: T) => R, headers?: Object): Observable; + getJSON(url: string, headers?: Object): Observable; } export function ajaxGet(url: string, headers: Object = null) { @@ -86,7 +87,8 @@ export function ajaxPut(url: string, body?: any, headers?: Object): Observable(url: string, headers?: Object): Observable { - return new AjaxObservable({ method: 'GET', url, responseType: 'json', headers }).map(x => x.response); + return new AjaxObservable({ method: 'GET', url, responseType: 'json', headers }) + .lift(new MapOperator((x: AjaxResponse, index: number): T => x.response, null)); }; /** diff --git a/src/operator/map.ts b/src/operator/map.ts index 71f70292c7..22e97ca3da 100644 --- a/src/operator/map.ts +++ b/src/operator/map.ts @@ -46,7 +46,7 @@ export interface MapSignature { (project: (value: T, index: number) => R, thisArg?: any): Observable; } -class MapOperator implements Operator { +export class MapOperator implements Operator { constructor(private project: (value: T, index: number) => R, private thisArg: any) { }