chickendinosaur-http
Version:
Front-end, super slim, ajax, xhr, http library with promises.
117 lines (100 loc) • 3.6 kB
JavaScript
/**
* @author John Pittman <johnrichardpittman@gmail.com>
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define(['./../../es6-promise/promise.min.js'], factory);
} else if (typeof exports === 'object') {
// Node, CommonJS-like
module.exports = factory(require('es6-promise'));
} else {
// Browser globals (root is window)
root.ChickenDinosaur = root.ChickenDinosaur || {};
root.ChickenDinosaur.Http = factory(root.ES6Promise);
}
}(this, function(ES6Promise) {
'use strict'
var Promise = ES6Promise.Promise;
var parseResponseText = function(text) {
var result;
try {
result = JSON.parse(text);
} catch (e) {
result = text;
}
return result;
};
var createXHR = function(method, url, data) {
var promise = new Promise(function(resolve, reject) {
var xhr = XMLHttpRequest !== 'undefined' ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhr.open(method, url, true);
xhr.setRequestHeader('Content-type', 'application/json');
xhr.onreadystatechange = function() {
if (this.readyState === this.DONE) {
if (this.status === 200) {
// Success
resolve(parseResponseText(this.responseText));
} else {
// Error
reject(this);
}
}
};
if (method === 'POST' ||
method === 'PUT')
xhr.send(JSON.stringify(data));
else
xhr.send();
});
return promise;
};
var createURL = function(url, params) {
var queryURL = url.toString();
for (var key in params) {
queryURL += url.indexOf('?') !== -1 ? '&' : '?' + key + '=' + params[key];
}
return queryURL;
};
/**
* Creates http requests.
* @constructor
*/
function Http() {
/**
* @param {string} url
* @param {object} params - Query parameters.
* @return {Promise}
*/
this.get = function(url, params) {
return createXHR('GET', (params === undefined) ? url : createURL(url, params));
};
/**
* @param {string} url
* @param {object} params - Request parameters.
* @param {object} data - Request body data to insert.
* @return {Promise}
*/
this.post = function(url, data, params) {
return createXHR('POST', params === undefined ? url : createURL(url, params), data);
};
/**
* @param {string} url
* @param {object} params - Request parameters.
* @param {object} data - Request body data to update.
* @return {Promise}
*/
this.put = function(url, data, params) {
return createXHR('PUT', params === undefined ? url : createURL(url, params), data);
};
/**
* @param {string} url
* @param {object} params - Query parameters.
* @return {Promise}
*/
this.delete = function(url, params) {
return createXHR('DELETE', (params === undefined) ? url : createURL(url, params));
};
}
return new Http();
}));