fix(http): return URL in Response
Attach reponseURL or X-Request-URL to Response. Closes #5165
This commit is contained in:
@ -57,7 +57,7 @@ export class JSONPConnection_ extends JSONPConnection {
|
||||
_dom.cleanup(script);
|
||||
if (!this._finished) {
|
||||
let responseOptions =
|
||||
new ResponseOptions({body: JSONP_ERR_NO_CALLBACK, type: ResponseTypes.Error});
|
||||
new ResponseOptions({body: JSONP_ERR_NO_CALLBACK, type: ResponseTypes.Error, url});
|
||||
if (isPresent(baseResponseOptions)) {
|
||||
responseOptions = baseResponseOptions.merge(responseOptions);
|
||||
}
|
||||
@ -65,7 +65,7 @@ export class JSONPConnection_ extends JSONPConnection {
|
||||
return;
|
||||
}
|
||||
|
||||
let responseOptions = new ResponseOptions({body: this._responseData});
|
||||
let responseOptions = new ResponseOptions({body: this._responseData, url});
|
||||
if (isPresent(this.baseResponseOptions)) {
|
||||
responseOptions = this.baseResponseOptions.merge(responseOptions);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import {Injectable} from 'angular2/angular2';
|
||||
import {BrowserXhr} from './browser_xhr';
|
||||
import {isPresent} from 'angular2/src/facade/lang';
|
||||
import {Observable} from 'angular2/angular2';
|
||||
import {isSuccess} from '../http_utils';
|
||||
import {isSuccess, getResponseURL} from '../http_utils';
|
||||
/**
|
||||
* Creates connections using `XMLHttpRequest`. Given a fully-qualified
|
||||
* request, an `XHRConnection` will immediately create an `XMLHttpRequest` object and send the
|
||||
@ -39,6 +39,8 @@ export class XHRConnection implements Connection {
|
||||
|
||||
let headers = Headers.fromResponseHeaderString(_xhr.getAllResponseHeaders());
|
||||
|
||||
let url = getResponseURL(_xhr);
|
||||
|
||||
// normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
|
||||
let status: number = _xhr.status === 1223 ? 204 : _xhr.status;
|
||||
|
||||
@ -48,7 +50,7 @@ export class XHRConnection implements Connection {
|
||||
if (status === 0) {
|
||||
status = body ? 200 : 0;
|
||||
}
|
||||
var responseOptions = new ResponseOptions({body, status, headers});
|
||||
var responseOptions = new ResponseOptions({body, status, headers, url});
|
||||
if (isPresent(baseResponseOptions)) {
|
||||
responseOptions = baseResponseOptions.merge(responseOptions);
|
||||
}
|
||||
|
@ -17,4 +17,14 @@ export function normalizeMethodName(method): RequestMethods {
|
||||
|
||||
export const isSuccess = (status: number): boolean => (status >= 200 && status < 300);
|
||||
|
||||
export function getResponseURL(xhr: any): string {
|
||||
if ('responseURL' in xhr) {
|
||||
return xhr.responseURL;
|
||||
}
|
||||
if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
|
||||
return xhr.getResponseHeader('X-Request-URL');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
export {isJsObject} from 'angular2/src/facade/lang';
|
||||
|
Reference in New Issue
Block a user