AJAX onreadystatechange 函数并不总是被调用
AJAX onreadystatechange function not always called
我有一个 AJAX 调用,使用以下方法检索一些 XML。通常,当我 运行 代码时,它直到我的 foreach 循环的最后一次迭代才进入 onreadystatechange
函数。我假设这是因为对 "www.webpage.com/" + arrayValue
的调用花费了足够的时间,以至于在状态更新为 "Ready" 然后下一个请求存在之前。该方法在循环的最后一次迭代中可能只有 运行s,因为没有其他请求覆盖它,因此有时间变为 "Ready"。从我在网上看到的情况来看,您实际上无法在 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!");
}
}
});
这里的问题是您试图对多个请求使用相同 XMLHttpRequest 对象。
不要那样做。为 each 请求创建一个新的、干净的 XMLHttpRequest 实例。
myArray.forEach((arrayValue, index) => {
var getXML = new XMLHttpRequest();
getXML.open("GET", "www.webpage.com/" + arrayValue, true);
我有一个 AJAX 调用,使用以下方法检索一些 XML。通常,当我 运行 代码时,它直到我的 foreach 循环的最后一次迭代才进入 onreadystatechange
函数。我假设这是因为对 "www.webpage.com/" + arrayValue
的调用花费了足够的时间,以至于在状态更新为 "Ready" 然后下一个请求存在之前。该方法在循环的最后一次迭代中可能只有 运行s,因为没有其他请求覆盖它,因此有时间变为 "Ready"。从我在网上看到的情况来看,您实际上无法在 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!");
}
}
});
这里的问题是您试图对多个请求使用相同 XMLHttpRequest 对象。
不要那样做。为 each 请求创建一个新的、干净的 XMLHttpRequest 实例。
myArray.forEach((arrayValue, index) => {
var getXML = new XMLHttpRequest();
getXML.open("GET", "www.webpage.com/" + arrayValue, true);