X Tutup
Skip to content

Commit 31687ef

Browse files
committed
fix(http): use Response for JSONP errors
Return Response when JSONP backend errors
1 parent 69e4b62 commit 31687ef

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

modules/angular2/src/http/backends/jsonp_backend.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {ConnectionBackend, Connection} from '../interfaces';
2-
import {ReadyStates, RequestMethods} from '../enums';
2+
import {ReadyStates, RequestMethods, ResponseTypes} from '../enums';
33
import {Request} from '../static_request';
44
import {Response} from '../static_response';
55
import {ResponseOptions, BaseResponseOptions} from '../base_response_options';
@@ -11,6 +11,10 @@ import {StringWrapper, isPresent} from 'angular2/src/core/facade/lang';
1111
// todo(robwormald): temporary until https://github.com/angular/angular/issues/4390 decided
1212
var Rx = require('@reactivex/rxjs/dist/cjs/Rx');
1313
var {Observable} = Rx;
14+
15+
const JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';
16+
const JSONP_ERR_WRONG_METHOD = 'JSONP requests must use GET request method.';
17+
1418
export abstract class JSONPConnection implements Connection {
1519
readyState: ReadyStates;
1620
request: Request;
@@ -28,7 +32,7 @@ export class JSONPConnection_ extends JSONPConnection {
2832
private baseResponseOptions?: ResponseOptions) {
2933
super();
3034
if (req.method !== RequestMethods.Get) {
31-
throw makeTypeError("JSONP requests must use GET request method.");
35+
throw makeTypeError(JSONP_ERR_WRONG_METHOD);
3236
}
3337
this.request = req;
3438
this.response = new Observable(responseObserver => {
@@ -56,7 +60,12 @@ export class JSONPConnection_ extends JSONPConnection {
5660
this.readyState = ReadyStates.Done;
5761
_dom.cleanup(script);
5862
if (!this._finished) {
59-
responseObserver.error(makeTypeError('JSONP injected script did not invoke callback.'));
63+
let responseOptions =
64+
new ResponseOptions({body: JSONP_ERR_NO_CALLBACK, type: ResponseTypes.Error});
65+
if (isPresent(baseResponseOptions)) {
66+
responseOptions = baseResponseOptions.merge(responseOptions);
67+
}
68+
responseObserver.error(new Response(responseOptions));
6069
return;
6170
}
6271

@@ -73,7 +82,11 @@ export class JSONPConnection_ extends JSONPConnection {
7382
if (this.readyState === ReadyStates.Cancelled) return;
7483
this.readyState = ReadyStates.Done;
7584
_dom.cleanup(script);
76-
responseObserver.error(error);
85+
let responseOptions = new ResponseOptions({body: error.message, type: ResponseTypes.Error});
86+
if (isPresent(baseResponseOptions)) {
87+
responseOptions = baseResponseOptions.merge(responseOptions);
88+
}
89+
responseObserver.error(new Response(responseOptions));
7790
};
7891

7992
script.addEventListener('load', onLoad);

modules/angular2/test/http/backends/jsonp_backend_spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export function main() {
134134
async.done();
135135
},
136136
err => {
137-
expect(StringWrapper.contains(err.message, 'did not invoke callback')).toBe(true);
137+
expect(err.text()).toEqual('JSONP injected script did not invoke callback.');
138138
async.done();
139139
});
140140

@@ -150,7 +150,7 @@ export function main() {
150150
async.done();
151151
},
152152
err => {
153-
expect(err['message']).toBe('Oops!');
153+
expect(err.text()).toBe('Oops!');
154154
async.done();
155155
});
156156

0 commit comments

Comments
 (0)
X Tutup