UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

121 lines 5.8 kB
'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { if (typeof Reflect === "object" && typeof Reflect.decorate === "function") return Reflect.decorate(decorators, target, key, desc); switch (arguments.length) { case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target); case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0); case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc); } }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var enums_1 = require('../enums'); var static_response_1 = require('../static_response'); var base_response_options_1 = require('../base_response_options'); var angular2_1 = require('angular2/angular2'); var browser_xhr_1 = require('./browser_xhr'); var lang_1 = require('angular2/src/facade/lang'); var angular2_2 = require('angular2/angular2'); /** * Creates connections using `XMLHttpRequest`. Given a fully-qualified * request, an `XHRConnection` will immediately create an `XMLHttpRequest` object and send the * request. * * This class would typically not be created or interacted with directly inside applications, though * the {@link MockConnection} may be interacted with in tests. */ var XHRConnection = (function () { function XHRConnection(req, browserXHR, baseResponseOptions) { var _this = this; this.request = req; this.response = new angular2_2.Observable(function (responseObserver) { var _xhr = browserXHR.build(); _xhr.open(enums_1.RequestMethods[req.method].toUpperCase(), req.url); // load event handler var onLoad = function () { // responseText is the old-school way of retrieving response (supported by IE8 & 9) // response/responseType properties were introduced in XHR Level2 spec (supported by // IE10) var response = lang_1.isPresent(_xhr.response) ? _xhr.response : _xhr.responseText; // normalize IE9 bug (http://bugs.jquery.com/ticket/1450) var status = _xhr.status === 1223 ? 204 : _xhr.status; // fix status code when it is 0 (0 status is undocumented). // Occurs when accessing file resources or on Android 4.1 stock browser // while retrieving files from application cache. if (status === 0) { status = response ? 200 : 0; } var responseOptions = new base_response_options_1.ResponseOptions({ body: response, status: status }); if (lang_1.isPresent(baseResponseOptions)) { responseOptions = baseResponseOptions.merge(responseOptions); } responseObserver.next(new static_response_1.Response(responseOptions)); // TODO(gdi2290): defer complete if array buffer until done responseObserver.complete(); }; // error event handler var onError = function (err) { var responseOptions = new base_response_options_1.ResponseOptions({ body: err, type: enums_1.ResponseTypes.Error }); if (lang_1.isPresent(baseResponseOptions)) { responseOptions = baseResponseOptions.merge(responseOptions); } responseObserver.error(new static_response_1.Response(responseOptions)); }; if (lang_1.isPresent(req.headers)) { req.headers.forEach(function (values, name) { return _xhr.setRequestHeader(name, values.join(',')); }); } _xhr.addEventListener('load', onLoad); _xhr.addEventListener('error', onError); _xhr.send(_this.request.text()); return function () { _xhr.removeEventListener('load', onLoad); _xhr.removeEventListener('error', onError); _xhr.abort(); }; }); } return XHRConnection; })(); exports.XHRConnection = XHRConnection; /** * Creates {@link XHRConnection} instances. * * This class would typically not be used by end users, but could be * overridden if a different backend implementation should be used, * such as in a node backend. * * ### Example * * ``` * import {Http, MyNodeBackend, HTTP_PROVIDERS, BaseRequestOptions} from 'angular2/http'; * @Component({ * viewProviders: [ * HTTP_PROVIDERS, * provide(Http, {useFactory: (backend, options) => { * return new Http(backend, options); * }, deps: [MyNodeBackend, BaseRequestOptions]})] * }) * class MyComponent { * constructor(http:Http) { * http.request('people.json').subscribe(res => this.people = res.json()); * } * } * ``` * **/ var XHRBackend = (function () { function XHRBackend(_browserXHR, _baseResponseOptions) { this._browserXHR = _browserXHR; this._baseResponseOptions = _baseResponseOptions; } XHRBackend.prototype.createConnection = function (request) { return new XHRConnection(request, this._browserXHR, this._baseResponseOptions); }; XHRBackend = __decorate([ angular2_1.Injectable(), __metadata('design:paramtypes', [browser_xhr_1.BrowserXhr, base_response_options_1.ResponseOptions]) ], XHRBackend); return XHRBackend; })(); exports.XHRBackend = XHRBackend; //# sourceMappingURL=xhr_backend.js.map