11import { ConnectionBackend , Connection } from '../interfaces' ;
2- import { ReadyStates , RequestMethods } from '../enums' ;
2+ import { ReadyStates , RequestMethods , ResponseTypes } from '../enums' ;
33import { Request } from '../static_request' ;
44import { Response } from '../static_response' ;
55import { 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
1212var Rx = require ( '@reactivex/rxjs/dist/cjs/Rx' ) ;
1313var { 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+
1418export 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 ) ;
0 commit comments