自己封装AJAX

一直维护公司前端框架,ajax经常用到,为了提高用户友好程度,每个ajax请求前都加代码太难维护了。所以有了下面的代码

function ajax(opts) {
  var defaults = {
    type: 'GET',
    url: '',
    data: '',
    async: true,
    cache: true,
    contentType: 'application/x-www-form-urlencoded',
    success: function () {
    },
    error: function () {
    }
  };
  for (var key in opts) {
    defaults[key] = opts[key];
  }
 if (typeof defaults.data === 'object') {   
    var str = '';
    for (var key in defaults.data) {
        str += key + '=' + defaults.data[key] + '&';
    }
    defaults.data = str.substring(0, str.length - 1);
  }
  defaults.type = defaults.type.toUpperCase();
  defaults.cache = defaults.cache ? '' : '&' + new Date().getTime();
  if (defaults.type === 'GET' && (defaults.data || defaults.cache))    defaults.url += '?' + defaults.data + defaults.cache;
  var oXhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
  oXhr.open(defaults.type, defaults.url, defaults.async);
  if (defaults.type === 'GET')
     oXhr.send(null);
  else {
     oXhr.setRequestHeader("Content-type", defaults.contentType);
     oXhr.send(defaults.data);
  }
  oXhr.onreadystatechange = function () {
      if (oXhr.readyState === 4) {
          if (oXhr.status === 200)
              defaults.success.call(oXhr, oXhr.responseText);
          else {
              defaults.error();
          }
      }
  };
  }

我必须走出这漫漫黑暗的夜.