Только последний XMLHttpRequest возвращает данные - PullRequest
0 голосов
/ 30 января 2019

Я извлекаю некоторые файлы с сервера и добавляю их в файл [], чтобы прочитать их позже.Однако, когда я читаю несколько изображений, я получаю данные только от последнего изображения.Остальные нулевые.

      var files = [];
      var imageURLs = [];

      for(var i = 0; i < image.length; i++){
        imageURLs[i] = image[i].firstChild.nodeValue + "?t="+ Math.random();
      }

      for(var i = 0; i < imageURLs.length; i++){
        var xhr = new XMLHttpRequest();
        xhr.open("GET", imageURLs[i]);
        xhr.responseType = 'arraybuffer';
        xhr.customURL = imageURLs[i];
        xhr.send();
        xhr.onreadystatechange = function() {
          if(this.readyState == 4 && this.status == 200){
            var index = imageURLs.indexOf(this.responseURL);
            imageURLs.splice(index, 1);
            var arrayBuffer = xhr.response;
            files.push(new File([arrayBuffer], this.responseURL.toString().split('#').shift().split('?').shift().split('/').pop()));
            if(imageURLs.length == 0){
              makeFileList(files);
            }
          }
        };
      }

Я получаю ссылки из файла XML.

--------------------------------------ОБНОВИТЬ------------------------------------

Я исправил это, создав отдельный массив XMLHttpRequest и обработав их по отдельности следующим образом:

      var imageURLs = [];
      var files = [];
      var xhrs = []; //THIS IS NEW

      for(var i = 0; i < image.length; i++){
        imageURLs[i] = image[i].firstChild.nodeValue + "?t="+ Math.random();
        //I initialized them here
        xhrs[i] = new XMLHttpRequest();
        //I set their callbacks
        xhrs[i].onreadystatechange = function() {
          if(this.readyState == 4 && this.status == 200){
            var index = imageURLs.indexOf(this.responseURL);
            imageURLs.splice(index, 1);
            var arrayBuffer = this.response;
            files.push(new File([arrayBuffer], this.responseURL.toString().split('#').shift().split('?').shift().split('/').pop()));
            if(imageURLs.length == 0){
              makeFileList(files);
            }
          }
        };
      }

      for(var i = 0; i < imageURLs.length; i++){
        //I sent them
        xhrs[i].open("GET", imageURLs[i]);
        xhrs[i].responseType = 'arraybuffer';
        xhrs[i].customURL = imageURLs[i];
        xhrs[i].send();
      }
...