2013-09-24 2 views
1

함수를 여러 번 사용해야하고 같은 방법을 반복해서 쓰지 않으려했습니다. $ .getJSON() 응답을 사용하여 반환 될 var에 저장하려고했습니다. 그 방법으로 나는 그 방법을 부를 수 있습니다.

function startFilter(){ 
      var grid = []; 
      $.getJSON('data/gridData1.json',function(json){ 
       grid = json; 
       console.log(grid); 
      }); 
      console.log(grid); 
      return grid; 
     } 

격자 var는 .getJSON 내부에 설정되지만 .getJSON 외부에는 설정되지 않습니다. 왜 어떤 아이디어가 필요하며 더 많은 정보가 필요하다면 알려주십시오.

+6

아약스는 비동기입니다. return 문은'grid = json' 문 앞에 발생합니다. –

+0

@ JasonP이 말한 것을 확장하려면 대신 $ .ajax를 사용하고 원하는 경우 async = false 옵션을 추가하면됩니다. 코드를 비동기 적으로 구조화하는 것이 좋습니다. 콜백 함수를'startFilter'에 전달하면 그리드가됩니다. 호출이 완료된 후에는 그리드와 함께 콜백 함수를 호출 할 수 있으며 콜백은 그리드에서 원하는 모든 작업을 수행 할 수 있습니다. – Pete

답변

3

Ajax 호출은 비동기입니다. 여기에 사물들이 어떻게 배치되어 있는지가 있습니다.

function startFilter(){ 
    var grid = []; // (1) 
    $.getJSON('data/gridData1.json', function(json){ // (2) 
     grid = json; // (5) 
     console.log(grid); // (6) 
    }); 
    console.log(grid); // (3) 
    return grid; // (4) 
} 

당신은 당신의 논리를 구축하는 콜백을 사용해야합니다

function startFilter(callback) { 
    $.getJSON('data/gridData1.json', callback); 
} 

var grid = []; 
startFilter(function(json) { 
    grid = json; 
    // your logic here 
}); 
+0

감사합니다. 그 과정을 이해하지 못했지만 지금 받았어. – user2812097

0
var grid; 

function startFilter(dataReady){ 
     var grid = []; 
     $.getJSON('data/gridData1.json',function(json){ 
      grid = json; 

      dataReady() ; 
     }); 
     console.log(grid); 
     return grid; 
    } 

startFilter (function() { 
console.log(grid); 
}) ; 
관련 문제