Есть асинхронный запрос:
getData = (url, type='GET', async=true) => {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open(type, url, async);
/*xhr.setRequestHeader('Content-type', 'text/html');
xhr.setRequestHeader('Accept', 'application/json');
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.setRequestHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
xhr.setRequestHeader("Access-Control-Max-Age", "3600");
xhr.setRequestHeader("Access-Control-Allow-Headers", "x-requested-with"); */
xhr.onprogress = (event) => {
console.log( 'Получено ' + (event.loaded / 1024).toFixed(3) + ' Кбайт за ' + (event.timeStamp / 1000).toFixed(3) + ' секунд');
}
xhr.onload = () => {
if (xhr.status === 200) {
resolve({
data: JSON.parse(xhr.responseText),
status: xhr.status
});
} else {
reject({
error: xhr.statusText,
status: xhr.status
});
}
}
xhr.onerror = () => {
reject({
error: xhr.statusText ? xhr.statusText : 'Не удалось выполнить запрос',
status: xhr.status
});
}
xhr.send();
});
}
Напрямую с локалхост CORS не пускает.
Если через
https://cors-anywhere.herokuapp.com/ - работает через раз (непонятно, почему).
Прочитал, что нужно добавить предварительный запрос с OPTIONS, но как это сделать и с какими заголовками - не знаю.