UNPKG

chickendinosaur-http

Version:

Front-end, super slim, ajax, xhr, http library with promises.

117 lines (100 loc) 3.6 kB
/** * @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(); }));