Skip to content

Instantly share code, notes, and snippets.

@BrentFarris
Created June 25, 2017 02:33
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 BrentFarris/1a0085b1e97d2cfc31b3113498208853 to your computer and use it in GitHub Desktop.
Save BrentFarris/1a0085b1e97d2cfc31b3113498208853 to your computer and use it in GitHub Desktop.
JavaScript HTTP request thing
var http = {
xhr: function () {
if (typeof XMLHttpRequest !== 'undefined') {
return new XMLHttpRequest();
}
var versions = [
"MSXML2.XmlHttp.6.0",
"MSXML2.XmlHttp.5.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp.2.0",
"Microsoft.XmlHttp"
];
var xhr;
for (var i = 0; i < versions.length; i++) {
try {
xhr = new ActiveXObject(versions[i]);
break;
} catch (e) { }
}
return xhr;
},
send: function (url, method, data) {
var that = this;
return new Promise((resolve, reject) => {
var x = that.xhr();
x.open(method, url);
x.onreadystatechange = function () {
if (x.readyState == 4) {
var data = x.responseText;
try {
data = JSON.parse(x.responseText);
} catch (e) {
// Skip and just use raw text
}
resolve(data);
}
};
if (method == 'POST') {
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
x.send(data)
});
},
request: function (url, data, type) {
var query = [];
for (var key in data) {
if (data.hasOwnProperty(key)) {
query.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key]));
}
}
if ($js.online && $js.online.user && $js.online.user.account) {
query.push(encodeURIComponent("accessToken") + "=" + encodeURIComponent($js.online.user.account.accessToken));
if ($js.online.player.id) {
query.push(encodeURIComponent("player") + "=" + encodeURIComponent($js.online.player.id));
}
}
if (type == "GET") {
if (url.indexOf("?") >= 0) {
url += (query.length ? "&" + query.join("&") : "");
} else {
url += (query.length ? "?" + query.join("&") : "");
}
}
return this.send(url, type, query.join('&'));
},
get: function (url, data) {
return this.request(url, data, "GET");
},
post: function (url, data) {
return this.request(url, data, "POST");
},
put: function (url, data) {
return this.request(url, data, "PUT");
},
delete: function (url, data) {
return this.request(url, data, "DELETE");
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment