仅将所有onLoad()的最后一个索引发送给XMLHttpRequest onLoad()的结果

时间:2019-04-06 18:13:43

标签: javascript ajax

当我将索引值传递给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()中返回正确的索引值。

1 个答案:

答案 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()