const fetchHeaders = {
'Accept': 'text/html',
'Content-Type': 'text/html',
'X-Requested-With': 'XMLHttpRequest',
'Cache-Control': 'no-cache',
'Pragma': 'no-cache',
'Expires': '0'
};
/**
* Make an AJAX request.
*
* If error, catch return a promise error object:
*
* .catch(err => alert(`${err.url}\n\n${err.status} (${err.statusText})`));
*
* @param url URL of RESTful api to call
* @param options the fetch() options
* @param complete Promise resolve callback
* @param error Promise reject callback
* @returns Object {Promise, signal: AbortController}
*/
export function AjaxReq(url, options, complete, error) {
let fetchSignal = new AbortController();
let defaults = {
headers: fetchHeaders,
signal: fetchSignal.signal
};
// Extend default options
Object.assign(defaults, options);
let fetchPromise = fetch(url, defaults)
.then(resp => {
if (resp.status === 200)
return resp.json();
else
return Promise.reject(resp);
})
.catch(err => {
if (err.name === 'AbortError')
return;
if (err.url !== undefined)
toastr.error(err.url, `${err.status} (${err.statusText})`);
else
toastr.error(err);
});
// Add some properties to return value
return {
fetchPromise: () => fetchPromise,
abort: function () {
fetchSignal.abort()
}
};
}