{"id":2800,"date":"2019-11-01T13:55:47","date_gmt":"2019-11-01T12:55:47","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=2800"},"modified":"2022-07-25T08:35:42","modified_gmt":"2022-07-25T07:35:42","slug":"javascript-xhr-helper","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/javascript-xhr-helper\/","title":{"rendered":"Javascript xhr helper"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">(() => {\n    const xhrError = (xhr, message) => {\n        const error = new Error(message);\n        error.xhr = xhr;\n        return error;\n    };\n\n    const formDataUrlEncoded = (data) => {\n        var str = [];\n        if (data) {\n            Object.keys(data).forEach((key) => str.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(data[key])));\n        }\n        return str.join(\"&amp;\");\n    };\n\n    const baseRequest = (method, url, headers, postData, responseType, timeout) => {\n        return new Promise(function (resolve, reject) {\n            const xhr = new XMLHttpRequest();\n            xhr.responseType = responseType;\n            xhr.timeout = timeout || xhr.timeout;\n            xhr.open(method, url, true);\n            Object.keys(headers || {}).forEach((key) => xhr.setRequestHeader(key, headers[key]));            \n            xhr.addEventListener(\"error\", (event) => reject(xhrError(xhr, \"Network error (\" + url + \")\")));\n            xhr.addEventListener(\"timeout\", (event) => reject(xhrError(xhr, \"Timeout error (\" + url + \")\")));\n            xhr.addEventListener(\"load\", (event) => resolve(xhr));\n            xhr.send(postData);\n        });\n    };\n\n    const httpRequest = (url, data, settings) => {\n        settings = settings || {};\n        const method = (settings.method || \"GET\").toUpperCase();\n        const contentType = settings.contentType || \"x-www-form-urlencoded\";\n        const responseType = settings.responseType || \"text\"; \/\/ text | arraybuffer | ...\n        let postData = null;        \n        if (method === \"POST\" || method === \"PUT\") {\n            if (contentType === \"x-www-form-urlencoded\") {\n                postData = formDataUrlEncoded(data);\n            } else if (typeof data !== \"string\") {\n                postData = JSON.stringify(data);\n            } else {\n                postData = data;\n            }\n        } else if (data) {\n            url += \"?\" + formDataUrlEncoded(data);\n        }\n        return baseRequest(method, url, settings.headers, postData, responseType, settings.timeout)\n            .then((xhr) => {\n                const success = xhr.status >= 200 &amp;&amp; xhr.status &lt; 400;\n                return { xhr, data: xhr.responseText, success };\n            });\n    };\n\n    httpRequest('http:\/\/localhost:4200\/').then((xhr) => console.log(xhr.responseText));\n})();<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5,4,1],"tags":[],"class_list":["post-2800","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=2800"}],"version-history":[{"count":3,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2800\/revisions"}],"predecessor-version":[{"id":2810,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2800\/revisions\/2810"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=2800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=2800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=2800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}