Есть сайт. Используя инструмент разработчика и Postman, я отследил запрос, который отправляется, когда я нажимаю на загрузку файла. сделал тот же запрос, и в ответ я получил {"error": false, "status": 200} то же самое происходит при взаимодействии с пользовательским интерфейсом. Но после этого срабатывает blob и файл скачивается. В лучшем случае я сохраняю {"error": false, "status": 200} в файл. JS код запускаю через консоль разработчика в браузере.
Файлы генерируются до 30 мб. Если запустить через пользовательский интерфейс, то я вижу, что запрос обрабатывается не сразу. В моем случае я мгновенно получаю 200. Из чего я делаю вывод, что дело в асинхронном выполнении, но недостаточно знаний, чтобы завершить мысль. Прошу совета.
let XHR = new XMLHttpRequest();
let data = {event_name:'file_save_as'};
let link = 'link';
XHR.open( 'POST', link, true );
XHR.setRequestHeader('x-csrf-bypass', 'yes');
XHR.setRequestHeader("accept", "application/json");
XHR.setRequestHeader("Content-Type", "application/json");
XHR.onload = function(e) {
if (this.status == 200) {
// Create a new Blob object using the
//response data of the onload object
var blob = new Blob([this.response], {type: 'application/json'});
//Create a link element, hide it, direct
//it towards the blob, and then 'click' it programatically
let a = document.createElement("a");
a.style = "display: none";
document.body.appendChild(a);
//Create a DOMString representing the blob
//and point the link element towards it
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = 'myFile.txt';
//programatically click the link to trigger the download
a.click();
//release the reference to the file by revoking the Object URL
window.URL.revokeObjectURL(url);
}else{
//deal with your error state here
}
};
XHR.send(JSON.stringify(data));