加载多个json数据

时间:2017-07-14 13:39:37

标签: javascript arrays json

var address = [ "data/somedata1.json", "data/somedata2.json", "data/somedata3.json", "data/somedata4.json", "data/somedata5.json"];

并导入此文件的功能

function readData()
{
    var loadFile = function (filePath, done)
    {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", filePath, true);
        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        xhr.onload = function () { return done(this.responseText) }
        xhr.send();
    }
    address.forEach(function (file, i)
        {
            loadFile(file, function (responseText)
            {
            jsonData[i] = JSON.parse(responseText);
            if(i === 4)
            {
                fill(jsonData);
                document.getElementById("el").innerHTML = jsonData[2].title3;
                Dosometing(jsonData[0])
            }
            })
        })

}

所有JSON文件都具有绝对150kb。问题是,有时当我在网站上运行此代码时,我得到jsonData[0]未完成,有时加载成功。这意味着所有数据都没有正确加载。我做错了什么?有没有机会更好地编写此代码以确保正确加载所有文件?

1 个答案:

答案 0 :(得分:0)

一个问题是,即使对于小文件也无法保证,下载顺序完成。 最好使用单独的变量跟踪已完成的下载次数:

function readData() {
  var loadFile = function(filePath, done) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", filePath, true);
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.onload = function() { return done(this.responseText) }
    xhr.send();
  }
  var finishedCount = 0;
  address.forEach(function(file, i) {
    loadFile(file, function(responseText) {
      jsonData[i] = JSON.parse(responseText);
      finishedCount++;
      if(finishedCount === address.length) {
        fill(jsonData[4]);
        document.getElementById("el").innerHTML = jsonData[2].title3;
        Dosometing(jsonData[0])
      }
    });
  })
}