Skip to content

Instantly share code, notes, and snippets.

@13twelve
Created March 25, 2015 18:31
Show Gist options
  • Save 13twelve/9b3c5f91bf805e8f3a73 to your computer and use it in GitHub Desktop.
Save 13twelve/9b3c5f91bf805e8f3a73 to your computer and use it in GitHub Desktop.
Ajax helper
A17.Helpers.ajax_request = function(settings) {
/*
# A17.Helpers.ajax_request
* v.1
## description
Performs ajax requests
## requires
* A17.Helpers.turn_object_to_queryString
## parameters
settings object - required:
* url - required - url to send request to
* type - required - HTTP method to use ("POST", "GET", "PUT")
* data - optional - data object turned into a query string on the request
* requestHeaders - optional - an array of request header objects with header/value pairs eg: [{ header: "X-Requested-With", value: "XMLHttpRequest" }]
* onSuccess - optional - function to run on request success, returns the responseText, in whatever format that is
* onError - optional - function to run on request error, returns the responseText, if there is any, in whatever format that is
## returns
* nothing
## example usage:
A17.Helpers.ajax_request({
url: '/form-post.php',
type: "POST",
data: {
param1: "param1value",
param2: "param2value"
},
requestHeaders: [
{
header: "Content-Type",
value: "application/x-www-form-urlencoded; charset=UTF-8"
},
{
header: "X-Requested-With",
value: "XMLHttpRequest"
}
],
onSuccess: function(data){
el.innerHTML = data;
},
onError: function(data){
alert(data);
}
});
*/
var options = settings;
var request = new XMLHttpRequest();
options.query_string = "";
if (options.data !== undefined) {
if (A17.Helpers.turn_object_to_queryString) {
options.query_string = A17.Helpers.turn_object_to_queryString(options.data);
} else {
console.log("Missing: A17.Helpers.turn_object_to_queryString");
}
}
request.open(options.type, options.url+options.query_string, true);
if (options.type === "POST" && options.requestHeaders === undefined) {
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
}
if (options.requestHeaders !== undefined && options.requestHeaders.length > 0) {
for (var i = 0; i < options.requestHeaders.length; i++) {
var header = options.requestHeaders[i].header;
var value = options.requestHeaders[i].value;
if (header !== undefined && value !== undefined) {
request.setRequestHeader(header, value);
}
}
}
request.onload = function() {
if (request.status >= 200 && request.status < 400){
// Success!
if ((typeof options.onSuccess).toLowerCase() === "function") {
options.onSuccess.call(this,request.responseText);
}
} else {
console.log("We reached our target server, but it returned an error: "+request.statusText);
if ((typeof options.onError).toLowerCase() === "function") {
options.onError.call(this,request.responseText);
}
}
};
request.onerror = function() {
console.log("There was a connection error of some sort");
if ((typeof options.onError).toLowerCase() === "function") {
options.onError.call();
}
};
request.send();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment