Skip to content

Instantly share code, notes, and snippets.

@beattyml1
Last active August 29, 2015 14:23
Show Gist options
  • Save beattyml1/c3ed8db3c64b779ca27f to your computer and use it in GitHub Desktop.
Save beattyml1/c3ed8db3c64b779ca27f to your computer and use it in GitHub Desktop.
AJ
var AJ = (function() {
var jsonRequest = function(verb, path) {
return function(data, callback) {
var req = new XMLHttpRequest();
req.open(verb, path, true);
req.onreadystatechange = callback;
req.send(JSON.stringify(data));
}
};
var queryString = function(data) {
'?' + Object.keys(data).map(function(k) {
return encodeURIComponent(k) + '=' + encodeURIComponent(data[k])
}).join('&');
};
var hasValue = function (data) { return data && data !== 0; }
var urlRequest = function(verb, path) {
return function(data, callback) {
var req = new XMLHttpRequest();
var urlParams = hasValue(data) ? (typeof data === 'object' ? queryString(data) : '/' + data) : '';
req.open(verb, path + urlParams, true);
req.onreadystatechange = callback;
req.send();
}
};
var post = function(path) { jsonRequest('POST', path); };
var get = function(path) { urlRequest('GET', path); };
var delete = function(path) { urlRequest('DELETE', path); };
var put = function(path) { jsonRequest('PUT', path); };
return {
request: request,
post: post,
get: get,
delete: delete,
put: put
resource: function(path) {
return {
get: get(path),
post: post(path),
delete: delete(path),
put: path(path)
}
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment