Всем привет,
var xhrDownloadImage = function (url, callback) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "blob";
xhr.onerror = function(e){console.log("Error: " + e)};
xhr.onabort = function(e){console.log("Abort: " + e)};
xhr.onload = function () {
console.log("onload");
var result;
if (xhr.status === 200) {
// image as blob
result = xhr.response;
} else {
result = null;
}
callback(result);
};
console.log(xhr.send());
};
Я вызываю вышеуказанную функцию в цикле for, каждый раз после выполнения функции мне нужно выполнить другую функцию, например "function a". Я использую xhr.response как ввод функции "a".
Но так как он асинхронный, он не ждет ответа и продолжает выполнение цикла. Так что я не мог правильно выбраться.
Я попытался сменить XMLHttpRequest на синхронизацию. Но в этом случае я получаю следующую ошибку:
Uncaught InvalidAccessError: Failed to set the 'responseType' property on 'XMLHttpRequest': the response type can only be changed for asynchronous HTTP requests made from a document.
Как я могу сохранить async XMLHttpRequest и выполнять функцию "точно" после получения ответа каждый раз?
Пожалуйста, помогите, спасибо.
Это то, за что обратный вызов:
xhrDownloadImage(url,a); // <--- this is how you call function "a"
Кроме того, если у вас есть несколько функций, которые необходимо запустить после загрузки:
xhrDownloadImage(url,function(result){
a(result);
b(result);
some_other_function();
});