bail
4/16/2015 - 8:23 PM

Ajaxer

Ajaxer

/**
 * @class Ajaxer
 */
var Ajaxer = (function() {
  'use strict';
  
  /**
   * Identifier for an XHR 'Done' state 
   * @const XHR_STATE_DONE {Unsigned Integer}
   */
  var XHR_STATE_DONE = 4;
  
  /**
   * @constructor
   */
  function Ajaxer() {
  }

  /**
   * @method get
   * @param args {Object}:
   *   path {String}
   *   success {Function(message{String})|undefined}
   *   failure {Function(message{String})|undefined}
   */
  Ajaxer.prototype.get = function(args) {
    
    var xhr = new XMLHttpRequest();
    
    // @type {Function()}
    var handleSuccess = _handleSuccess;
    
    // @type {Function()}
    var handleFailure = _handleFailure;
    
    //
    
    xhr.addEventListener('readystatechange', readyStateChangeListener);
    xhr.open('GET', args.path, true);
    xhr.send();
    
    //
    
    function readyStateChangeListener() {
      switch (xhr.readyState) {
        case XHR_STATE_DONE:
          xhr.status === 200? handleSuccess() : handleFailure();
          break;
        default:
          break;
      }
    }
    
    //
    
    function _handleSuccess() {
      args.success? args.success(xhr.responseText) : null;
    }
    
    function _handleFailure() {
      args.failure? args.failure(xhr.responseText) : null;
    }
    
  };

  return Ajaxer;

})();