f50438e76f
* 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
30 lines
1 KiB
JavaScript
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;
|
|
};
|
|
}
|