frontexpress/lib/requester.js

70 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2016-07-15 19:34:24 +00:00
/**
* Module dependencies.
* @private
*/
2016-06-26 10:10:37 +00:00
export default class Requester {
2016-07-15 19:34:24 +00:00
/**
* Make an ajax request.
*
* @param {Object} request
* @param {Function} success callback
* @param {Function} failure callback
* @private
*/
2016-07-23 10:31:40 +00:00
fetch(request, resolve, reject) {
const {method, uri, headers, data} = request;
2016-07-23 10:31:40 +00:00
2016-06-26 10:10:37 +00:00
const success = (responseText) => {
resolve(
2016-07-23 10:31:40 +00:00
request,
{
status: 200,
statusText: 'OK',
responseText
}
2016-06-26 10:10:37 +00:00
);
};
const fail = ({status, statusText, errorThrown}) => {
reject(
2016-07-23 10:31:40 +00:00
request,
{
status,
statusText,
errorThrown,
errors: `HTTP ${status} ${statusText?statusText:''}`
}
2016-06-26 10:10:37 +00:00
);
};
const xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = () => {
2017-01-15 11:00:51 +00:00
if (xmlhttp.readyState === 4) { //XMLHttpRequest.DONE
2016-06-26 10:10:37 +00:00
if (xmlhttp.status === 200) {
success(xmlhttp.responseText);
} else {
fail({status: xmlhttp.status, statusText: xmlhttp.statusText});
}
}
};
try {
xmlhttp.open(method, uri, true);
if (headers) {
2017-01-15 11:00:51 +00:00
Object.keys(headers).forEach((header) => {
2016-06-26 10:10:37 +00:00
xmlhttp.setRequestHeader(header, headers[header]);
2017-01-15 11:00:51 +00:00
});
2016-06-26 10:10:37 +00:00
}
if (data) {
xmlhttp.send(data);
2016-06-26 10:10:37 +00:00
} else {
xmlhttp.send();
}
} catch (errorThrown) {
fail({errorThrown});
}
}
}