Skip to content

Instantly share code, notes, and snippets.

@beaucharman
Last active December 16, 2015 05:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save beaucharman/5384446 to your computer and use it in GitHub Desktop.
Save beaucharman/5384446 to your computer and use it in GitHub Desktop.
ajax{} | JavaScript object | AJAX methods object
// examples
;(function () {
ajax.json('file.php', {best: "cats", awesome: "javascript"}, function (json) {
var foo = document.getElementById('foo');
for (var ii = 0, len = json.length; ii < len; ii++) {
foo.innerHTML += '<li>' + json[ii].name + ': ' + json[ii].details + '</li>';
}
});
ajax.load('example.html', '', function (xhr) {
document.getElementById('bar').innerHTML = xhr.responseText;
});
})();
/**
* AJAX
* ------------------------------------------------------------------------
* ajax{}
* @version 1.0 | April 23rd 2013
* @author Beau Charman | @beaucharman | http://beaucharman.me
* @link https://gist.github.com/beaucharman/5384446/
* @method load
* @method json
* @method toQueryString
*
* Some AJAX and JSON helper functions.
* Todo
* 1. callback that simply returns the value
* 2. send params as object
* ------------------------------------------------------------------------ */
var ajax = {
/**
* Load
* ------------------------------------------------------------------------
* ajax.load()
* @param {string} url
* @param {object} data
* @param {function} callback
*
* AJAX loads data from url.
* ------------------------------------------------------------------------ */
load: function (url, data, callback) {
var xhr;
data = (data) ? this.toQueryString(data) : '';
/* Get the xmlhttp request method */
if (window.XMLHttpRequest && typeof XMLHttpRequest !== 'undefined') {
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
var versions = [
"MSXML2.XmlHttp.5.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp",
"Microsoft.XmlHttp"
];
for (var ii = 0, ln = versions.length; ii < ln; ii++) {
try {
xhr = new ActiveXObject(versions[ii]);
break;
}
catch(e){}
}
}
/* Capture and act on state changes */
xhr.onreadystatechange = function() {
if (xhr.readyState !== 4 || xhr.status !== 200) {
return;
}
callback(xhr);
};
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(data);
},
/**
* JSON
* ------------------------------------------------------------------------
* ajax.json()
* @param {string} url
* @param {object} data
* @param {function} callback
*
* Loads and then parses JSON data from url.
* ------------------------------------------------------------------------ */
json: function (url, data, callback) {
this.load(url, data, function (xhr) {
callback(JSON.parse(xhr.responseText));
});
},
/**
* To Query String
* ------------------------------------------------------------------------
* ajax.toQueryString()
* @param {object} obj
* @return {string}
*
* Converts a javaScript object into a URL friendly query string.
* ------------------------------------------------------------------------ */
toQueryString: function (obj) {
var str = '';
var ln;
for (var pro in obj) {
str += pro + '=' + obj[pro] + '&';
}
ln = str.length;
return str.slice(0, ln - 1);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment