因此,我尝试使用Javascript加载具有标头和数据属性的json文件,然后尝试将数据用于其他方法。 json文件正在加载(由“ console.log(header.dx)”证明),但是代码没有更新我的外部数组(如对“ console.log(productPoints.length,productPoints)的调用所证明的)“)。我究竟做错了什么?

var productFile = "aJsonFile.json";
var productPoints = [];
$.getJSON(productFile)
  .done(function(json) {
    var data = json[0].data;
    var header = json[0].header;
    console.log(header.dx);
    k = 0;
    for (var j = 0; j < header.ny; j++) {
      for (var i = 0; i < header.nx; i++, k++) {
        var point = new ol.geom.Point(
          [floorMod(180 + header.lo1 + i * header.dx, 360) - 180,
          header.la1 - j * header.dy]
        );
        var feature = new ol.Feature({ geometry: point, value: data[k] });
        productPoints.push(feature);
      }
    }
  });
console.log(productPoints.length, productPoints);

var floorMod = function(a, n) {
  var f = a - n * Math.floor(a / n);
  return f === n ? 0 : f;
};

最佳答案

Ajax调用是异步的。登录阵列后,ajax调用可能会结束。尝试将console.log移动到done()函数中。

var productFile = "aJsonFile.json";
var productPoints = [];
$.getJSON(productFile)
  .done(function(json) {
    var data = json[0].data;
    var header = json[0].header;
    console.log(header.dx);
    k = 0;
    for (var j = 0; j < header.ny; j++) {
      for (var i = 0; i < header.nx; i++, k++) {
        var point = new ol.geom.Point(
          [floorMod(180 + header.lo1 + i * header.dx, 360) - 180,
          header.la1 - j * header.dy]
        );
        var feature = new ol.Feature({ geometry: point, value: data[k] });
        productPoints.push(feature);
      }
    }
    console.log(productPoints.length, productPoints);
  });


var floorMod = function(a, n) {
  var f = a - n * Math.floor(a / n);
  return f === n ? 0 : f;
};

关于javascript - 使用jQuery加载后使用JSON数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42566720/

10-12 13:12