大家好,
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.
如何保持'XMLHttpRequest'异步并在每次获得响应后完全“运行”?
请帮忙, 感谢。
答案 0 :(得分:1)
这就是回调的用途:
xhrDownloadImage(url,a); // <--- this is how you call function "a"
或者,如果您在下载后需要运行多个功能:
xhrDownloadImage(url,function(result){
a(result);
b(result);
some_other_function();
});