open-consul/ui-v2/app/utils/http/xhr.js
John Cowen f50438e76f
ui: Remove jQuery from the production build (#8088)
* ui: Split up client/http and replace $.ajax

This splits the client/http service more in the following ways:

1. Connections are now split out into its own service
2. The transport is now split out into its own service that returns a
listener based http transport
3. Various string parsing/stringifying functions are now split out into
utils

* Remove jQuery from our production build

* Move the coverage serving to the server.js file

* Self review amends

* Add X-Requested-With header

* Move some files around, externalize some functions

* Move connection tracking to use native Set

* Ensure HTTP parsing doesn't encode headers

In the future this will change to deal with all HTTP parsing in one
place, hence the commented out METHOD_PARSING etc

* Start to fix up integration tests to use requestParams
2020-07-07 19:58:46 +01:00

30 lines
1 KiB
JavaScript

export default function(parseHeaders, XHR) {
return function(options) {
const xhr = new (XHR || XMLHttpRequest)();
xhr.onreadystatechange = function() {
if (this.readyState === 4) {
const headers = parseHeaders(this.getAllResponseHeaders().split('\n'));
if (this.status >= 200 && this.status < 400) {
const response = options.converters['text json'](this.response);
options.success(headers, response, this.status, this.statusText);
} else {
options.error(headers, this.responseText, this.status, this.statusText, this.error);
}
options.complete(this.status);
}
};
xhr.open(options.method, options.url, true);
if (typeof options.headers === 'undefined') {
options.headers = {};
}
const headers = {
...options.headers,
'X-Requested-With': 'XMLHttpRequest',
};
Object.entries(headers).forEach(([key, value]) => xhr.setRequestHeader(key, value));
options.beforeSend(xhr);
xhr.send(options.body);
return xhr;
};
}