当我将索引值传递给onLoad()时,因此当它开始在后台运行时,它将使用索引值对数组进行索引。问题是,从表面上看,当onLoad()确实开始运行它所引用的索引值时,始终是最后一个索引。
我尝试将每个请求(XMLHttpRequest)属性设置为onLoad()启动时应使用的索引。
setXMLOnLoad (request, index, chart) {
let lenOfEachArray = this.lenOfEachArray;
const wrapSensorArray = (index) => {return this.getSensorArray(index)};
const wrapSetSensorArray = (index, data) => {this.setSensorArray(index, data);};
//request.op = new Number(index);
request.op = index;
console.log(request.op); // reports 0 then 1 (fine)
request.onload = function () {
let sIndex = request.op; // reports 1 every time! (not fine)
console.log(sIndex);
}
}
createXMLRequests (chart) {
this.XMLRequestsArray = new Array(this.getNum()).fill(new XMLHttpRequest());
this.XMLRequestsArray.forEach((request,index) => {
this.setXMLOnLoad(request, index, chart);
});
}
sendXMLRequests (link) {
this.XMLRequestsArray.forEach((request, index) => {
let id = index + 1;
let finalLink = link.concat(`${id}`);
request.open("GET", finalLink);
request.send();
});
}
期望request.op
在预先分配的onLoad()中返回正确的索引值。
答案 0 :(得分:1)
更新的答案
问题是fill(new XMLHttpRequest())
实际上仅创建一个XMLHttpRequest实例,该实例将被覆盖,这将取消以前的http调用。在检查器中打开“网络”选项卡时,您会看到此消息:只有一个请求通过,其他请求被取消。
此小片段发送了4个http请求,因此您仍然可以执行所需操作,希望您可以以此来调整代码!
function createXMLRequests () {
let XMLRequestsArray = [new XMLHttpRequest(), new XMLHttpRequest(), new XMLHttpRequest()]
XMLRequestsArray.forEach((request,index) => {
request.onload = function () {
console.log("request fulfilled");
console.log(index)
}
request.open("GET", "http://localhost/test.php");
request.send();
});
}
createXMLRequests()