Source: platform/browser-platform.js

/**
 * 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;