Выполнять задачу только после получения ответа «XmlHttpRequest»

0

Всем привет,

            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 и выполнять функцию "точно" после получения ответа каждый раз?

Пожалуйста, помогите, спасибо.

Теги:
xmlhttprequest

1 ответ

1
Лучший ответ

Это то, за что обратный вызов:

xhrDownloadImage(url,a); // <--- this is how you call function "a"

Кроме того, если у вас есть несколько функций, которые необходимо запустить после загрузки:

xhrDownloadImage(url,function(result){
    a(result);
    b(result);
    some_other_function();
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню