UNPKG

@syncfusion/ej2-base

Version:

A common package of Essential JS 2 base libraries, methods and class definitions

165 lines (164 loc) 5.84 kB
import { isNullOrUndefined, merge } from './util'; var headerRegex = /^(.*?):[ \t]*([^\r\n]*)$/gm; var defaultType = 'GET'; /** * Ajax class provides ability to make asynchronous HTTP request to the server * ```typescript * var ajax = new Ajax("index.html", "GET", true); * ajax.send().then( * function (value) { * console.log(value); * }, * function (reason) { * console.log(reason); * }); * ``` */ var Ajax = /** @class */ (function () { /** * Constructor for Ajax class * * @param {string|Object} options ? * @param {string} type ? * @param {boolean} async ? * @returns defaultType any */ function Ajax(options, type, async, contentType) { /** * A boolean value indicating whether the request should be sent asynchronous or not. * * @default true */ this.mode = true; /** * A boolean value indicating whether to ignore the promise reject. * * @private * @default true */ this.emitError = true; this.options = {}; if (typeof options === 'string') { this.url = options; this.type = type ? type.toUpperCase() : defaultType; this.mode = !isNullOrUndefined(async) ? async : true; } else if (typeof options === 'object') { this.options = options; merge(this, this.options); } this.type = this.type ? this.type.toUpperCase() : defaultType; this.contentType = (this.contentType !== undefined) ? this.contentType : contentType; } /** * * Send the request to server. * * @param {any} data - To send the user data * @returns {Promise} ? */ Ajax.prototype.send = function (data) { var _this = this; this.data = isNullOrUndefined(data) ? this.data : data; var eventArgs = { cancel: false, httpRequest: null }; var promise = new Promise(function (resolve, reject) { _this.httpRequest = new XMLHttpRequest(); _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); }; if (!isNullOrUndefined(_this.onLoad)) { _this.httpRequest.onload = _this.onLoad; } if (!isNullOrUndefined(_this.onProgress)) { _this.httpRequest.onprogress = _this.onProgress; } /* istanbul ignore next */ if (!isNullOrUndefined(_this.onAbort)) { _this.httpRequest.onabort = _this.onAbort; } /* istanbul ignore next */ if (!isNullOrUndefined(_this.onError)) { _this.httpRequest.onerror = _this.onError; } //** Upload Events **/ /* istanbul ignore next */ if (!isNullOrUndefined(_this.onUploadProgress)) { _this.httpRequest.upload.onprogress = _this.onUploadProgress; } _this.httpRequest.open(_this.type, _this.url, _this.mode); // Set default headers if (!isNullOrUndefined(_this.data) && _this.contentType !== null) { _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8'); } if (_this.beforeSend) { eventArgs.httpRequest = _this.httpRequest; _this.beforeSend(eventArgs); } if (!eventArgs.cancel) { _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null); } }); return promise; }; Ajax.prototype.successHandler = function (data) { if (this.onSuccess) { this.onSuccess(data, this); } return data; }; Ajax.prototype.failureHandler = function (reason) { if (this.onFailure) { this.onFailure(this.httpRequest); } return reason; }; Ajax.prototype.stateChange = function (resolve, reject) { var data = this.httpRequest.responseText; if (this.dataType && this.dataType.toLowerCase() === 'json') { if (data === '') { data = undefined; } else { try { data = JSON.parse(data); } catch (error) { // no exception handle } } } if (this.httpRequest.readyState === 4) { //success range should be 200 to 299 if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) { resolve(this.successHandler(data)); } else { if (this.emitError) { reject(new Error(this.failureHandler(this.httpRequest.statusText))); } else { resolve(); } } } }; /** * To get the response header from XMLHttpRequest * * @param {string} key Key to search in the response header * @returns {string} ? */ Ajax.prototype.getResponseHeader = function (key) { var responseHeaders = {}; var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders()); while (headers) { responseHeaders[headers[1].toLowerCase()] = headers[2]; headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders()); } var header = responseHeaders[key.toLowerCase()]; return isNullOrUndefined(header) ? null : header; }; return Ajax; }()); export { Ajax };