并非总是调用AJAX onreadystatechange函数

时间:2018-08-06 14:56:51

标签: javascript ajax xml readystate onreadystatechange

我有一个AJAX调用,使用以下方法检索一些XML。通常,当我运行代码时,直到我的foreach循环的最后一次迭代,它才进入onreadystatechange函数。我假设这是因为对"www.webpage.com/" + arrayValue的调用花费了足够的时间,使得状态更新为“就绪”之前,然后是下一个请求。该方法可能仅在循环的最后一次迭代中运行,因为没有其他请求可以覆盖它,因此有时间变为“就绪”状态。根据我在网上看到的内容,您实际上无法在javascipt或AJAX中执行传统的Wait()语句来给调用时间提供完成时间。那么我该如何克服这个问题呢?

var getXML = new XMLHttpRequest();

myArray.forEach((arrayValue, index) => {
    getXML.open("GET", "www.webpage.com/" + arrayValue, true);
    getXML.setRequestHeader('Access-Control-Allow-Credentials', true);
    getXML.setRequestHeader('Authorization', "Basic " + btoa(":something"));
    getXML.send(null);
    getXML.onreadystatechange = function () {
        if(this.readyState == this.DONE) {
             Console.Log("We made it in!");
        }
    }
});

1 个答案:

答案 0 :(得分:1)

这里的问题是您试图对多个请求使用相同 XMLHttpRequest对象。

不要那样做。为每个请求创建一个全新的XMLHttpRequest实例。

myArray.forEach((arrayValue, index) => {
    var getXML = new XMLHttpRequest();
    getXML.open("GET", "www.webpage.com/" + arrayValue, true);