【问题标题】:AJAX onreadystatechange function not always calledAJAX onreadystatechange 函数并不总是被调用
【发布时间】:2018-08-06 14:56:51
【问题描述】:

我有一个 AJAX 调用来使用以下方法检索一些 XML。通常,当我运行代码时,它不会进入 onreadystatechange 函数,直到我的 foreach 循环的最后一次迭代。我假设这是因为对"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!");
        }
    }
});

【问题讨论】:

    标签: javascript ajax xml readystate onreadystatechange


    【解决方案1】:

    这里的问题是您试图将 same XMLHttpRequest 对象用于多个请求。

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

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

    【讨论】:

    • 正是我要写的。来自 Mozilla WebAPI——“注意:为已经激活的请求(已经调用 open() 的请求)调用此方法等同于调用 abort()。”
    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2014-01-09
    • 2014-08-23
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多