/** * Copyright© 2016, Oracle and/or its affiliates. All rights reserved. */ /** * Platform class for browser applications. Derives from [Platform]{@link Platform}. * @constructor * @global */ function BrowserPlatform(manager, logger, utils) { // init dependency injection parameters manager = manager || mcs.mobileBackendManager; utils = utils || mcs._utils; logger = logger || mcs._logger; var queryRegex = (/\?/); // call parent constructor Platform.call(this, logger, utils); this.isBrowser = true; this.isCordova = false; this.invokeService = function (request) { var url = request.url; if(this.isBrowser){ url = url + (queryRegex.test(url) ? "&" : "?" ) + "_=" + new Date().getTime(); } return new Promise(invoke); function invoke(resolve, reject){ var xhr = new XMLHttpRequest(); xhr.open(request.method, url); for (var key in request.headers) { if (request.headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, request.headers[key]); } } xhr.withCredentials = true; xhr.responseType = request.responseType || 'json'; xhr.onreadystatechange = function () { if (xhr.readyState === 4) { var response = xhr.responseType === '' || xhr.responseType === 'text' ? xhr.responseText : xhr.response; var headers = xhr.responseHeaders ? utils.normalizeHeaderKeys(xhr.responseHeaders) : utils.parseHeaders(xhr.getAllResponseHeaders()); var netResponse = new NetworkResponse(xhr.status, response, headers); // log response if(manager._config.logHTTP){ var object = { headers: headers, body: response }; logger.verbose('Received ' + request.method + ' response from ' + request.url, object); } if (xhr.status >= 200 && xhr.status <= 299) { resolve(netResponse); } else { reject(netResponse); } } }; xhr.send(request.data); // log request if(manager._config.logHTTP){ var object = { headers: request.headers, body: request.body }; logger.verbose('Sent ' + request.method + ' request to ' + request.url, object); } } }; } BrowserPlatform.prototype = Object.create(Platform.prototype); BrowserPlatform.prototype.constructor = BrowserPlatform;