2017-03-02 1 views
0

그래서 Javascript를 사용하여 헤더 및 데이터 속성이있는 json 파일을로드하려고 시도하고 다른 메소드에서 데이터를 사용하려고합니다. json 파일이 올바르게로드되고 있지만 ("console.log (header.dx)"로 표시됨) 코드가 내 외부 배열을 업데이트하지 않습니다 (console.log (productPoints.length, productPoints) "). 내가 도대체 ​​뭘 잘못하고있는 겁니까?jquery를 사용하여 json 데이터를로드 한 후 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