docs: function ajax(url, options, callback, data, cache) {
  
    if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {
      if (!cache) {
        data['_t'] = new Date();
      }
      // URL encoded form data must be in querystring format
      data = addQueryString('', data).slice(1);
    }
  
    if (options.queryStringParams) {
      url = addQueryString(url, options.queryStringParams);
    }
  
    try {
      var x;
      if (XMLHttpRequest) {
        x = new XMLHttpRequest();
      } else {
        x = new ActiveXObject('MSXML2.XMLHTTP.3.0');
      }
      x.open(data ? 'POST' : 'GET', url, 1);
      if (!options.crossDomain) {
        x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
      }
      x.withCredentials = !!options.withCredentials;
      if (data) {
        x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
      }
      if (x.overrideMimeType) {
        x.overrideMimeType("application/json");
      }
      var h = options.customHeaders;
      if (h) {
        for (var i in h) {
          x.setRequestHeader(i, h[i]);
        }
      }
      x.onreadystatechange = function () {
        x.readyState > 3 && callback && callback(x.responseText, x);
      };
      x.send(data);
    } catch (e) {
      console && console.log(e);
    }
  }