Jump To …

ajax.js

superscore ajax.js 0.2.0
(c) 2012 David Souther
superscore is freely distributable under the MIT license.
For all details and documentation:
https://github.com/DavidSouther/superscore
(function(_, $){
"use strict";

Ajax, through jQuery if possible.

var ajax = $ ? $.ajax : function (options){
  var xhr, XHR, d = _.Deferred();

Nice clean way to get an xhr

  XHR = window.ActiveXObject || XMLHttpRequest;
  xhr = new XHR('Microsoft.XMLHTTP');

Probably a GET requst, unless there is data or something else is specified.

  xhr.open(options.type || (options.data ? 'POST' : 'GET'), options.url, true);

Most likely sending text/plain

  if ('overrideMimeType' in xhr) {
    xhr.overrideMimeType(options.dataType || 'text/plain');
  }

Handle state changes.

  xhr.onreadystatechange = function() {
    var _ref;
    if (xhr.readyState === 4) {
      if ((_ref = xhr.status) === 0 || _ref === 200) {

Resolve on success.

        d.resolve(xhr.responseText);
      } else {

Reject on failure.

        d.reject(new Error("Could not load " + options.url));
      }
      return;
    }

Notify for any other events.

    d.notify(xhr);
  };

We'll need to set headers to send the data.

  if(options.data){
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.setRequestHeader("Content-length", options.data.length);
    xhr.setRequestHeader("Connection", "close");
  }

Execute the request.

  xhr.send(options.data || null);

No need to return the entire XHR request.

  return d.promise();
};

get(url[, options])

Shorthand for a GET request.

var get = $ ? $.get : function(url, options){
  options = options || {};
  options.url = url;
  options.type = 'GET';
  options.data = null;
  return _.ajax(options);
};

post(url[, options])

Shorthand for a POST request.

var post = $ ? $.post : function(url, options){
  options = options || {};
  options.url = url;
  options.type = 'POST';
  return _.ajax(options);
};

Add these to underscore.

_.mixin({
  ajax: ajax,
  get: get,
  post: post
});


}.call(this, _, jQuery || null));

/*global window:false, XMLHttpRequest:false*/