2013-09-24 28 views
1

我需要多次使用某個函數,並且希望避免一次又一次地寫入相同的方法。我想使用$ .getJSON()響應並將其存儲在將返回的變量中。這樣我可以調用這個方法。

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

grid var設置在.getJSON中,但不在.getJSON之外。任何想法爲什麼,如果需要更多的信息讓我知道?

+6

Ajax是異步。 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); 
}) ;