(() => {
const xhrError = (xhr, message) => {
const error = new Error(message);
error.xhr = xhr;
return error;
};
const formDataUrlEncoded = (data) => {
var str = [];
if (data) {
Object.keys(data).forEach((key) => str.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key])));
}
return str.join("&");
};
const baseRequest = (method, url, headers, postData, responseType, timeout) => {
return new Promise(function (resolve, reject) {
const xhr = new XMLHttpRequest();
xhr.responseType = responseType;
xhr.timeout = timeout || xhr.timeout;
xhr.open(method, url, true);
Object.keys(headers || {}).forEach((key) => xhr.setRequestHeader(key, headers[key]));
xhr.addEventListener("error", (event) => reject(xhrError(xhr, "Network error (" + url + ")")));
xhr.addEventListener("timeout", (event) => reject(xhrError(xhr, "Timeout error (" + url + ")")));
xhr.addEventListener("load", (event) => resolve(xhr));
xhr.send(postData);
});
};
const httpRequest = (url, data, settings) => {
settings = settings || {};
const method = (settings.method || "GET").toUpperCase();
const contentType = settings.contentType || "x-www-form-urlencoded";
const responseType = settings.responseType || "text"; // text | arraybuffer | ...
let postData = null;
if (method === "POST" || method === "PUT") {
if (contentType === "x-www-form-urlencoded") {
postData = formDataUrlEncoded(data);
} else if (typeof data !== "string") {
postData = JSON.stringify(data);
} else {
postData = data;
}
} else if (data) {
url += "?" + formDataUrlEncoded(data);
}
return baseRequest(method, url, settings.headers, postData, responseType, settings.timeout)
.then((xhr) => {
const success = xhr.status >= 200 && xhr.status < 400;
return { xhr, data: xhr.responseText, success };
});
};
httpRequest('http://localhost:4200/').then((xhr) => console.log(xhr.responseText));
})();
280000cookie-checkJavascript xhr helper