2017-03-02 10 views
0

Javascriptを使用してヘッダーとデータ属性を持つjsonファイルをロードしようとしていて、他のメソッドでデータを使用しようとしています。 jsonファイルは正しくロードされています(「console.log(header.dx)」で示されています)が、コードは私の外側の配列を更新していません(console.log(productPoints.length、productPoints ) ")。私は間違って何をしていますか?jqueryを使用してロードした後にjsonデータを使用する

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

答えて

3

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; 
}; 
+0

ダング、なぜ私はそれについて忘れていますか?私には恥ずべき。 – ksed

関連する問題