Отправка индекса в XMLHttpRequest onLoad () приводит к использованию только последнего индекса для всех onLoad () - PullRequest
0 голосов
/ 06 апреля 2019

Когда я передаю значение индекса в 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 Ответ

1 голос
/ 06 апреля 2019

Обновленный ответ

Проблема в том, что 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...