获取“XmlHttpRequest”响应后才执行任务

时间:2013-11-30 06:16:03

标签: javascript jquery xmlhttprequest

大家好,

            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'异步并在每次获得响应后完全“运行”?

请帮忙, 感谢。

1 个答案:

答案 0 :(得分:1)

这就是回调的用途:

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

或者,如果您在下载后需要运行多个功能:

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