【问题标题】:load multi json data加载多json数据
【发布时间】:2017-07-14 13:39:37
【问题描述】:
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] 未定义,有时全部加载成功。这意味着所有数据都没有正确加载。我做错了什么?是否有机会更好地编写此代码以确保正确加载所有文件?

【问题讨论】:

  • 您通常使用<script> 而不是<code>。可以试试<script>标签吗?
  • 感谢
  • 有时是什么意思?是同一台机器,同一个浏览器,同一个文件吗?
  • <code> 标签是您代码的一部分吗?我认为这是尝试为 Stack Overflow 格式化代码。

标签: javascript arrays json


【解决方案1】:

一个问题是,即使对于小文件,也不能保证下载按顺序完成。 最好使用单独的变量来跟踪完成的下载计数:

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])
      }
    });
  })
}

【讨论】:

  • 我这样修改文件,但我不知道是否正确
  • 我只是在我的答案中包含了修改后的代码,我想到了类似的东西。
猜你喜欢
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
相关资源
最近更新 更多