2011-01-21 127 views
14

我試圖獲得ajax請求的結果,以便設置一個我可以在該請求之外訪問的變量。我試過這個JQuery - Storing ajax response into global variable,但我的變量beer$.getJSON$.ajax函數(我都試過)之外仍然未定義。Jquery - 將Ajax jSON響應存儲爲變量

這是我的代碼,我可以從console.log(beer)看到結果。

var beer; 
$.getJSON(jsonUrl, function (json) { 
    beer = json; 
    console.log(beer); // returns beer 
}); 
console.log(beer); // returns undefined 

var beer = (function() { 
    var result; 

    $.ajax({ 
     url: jsonUrl, 
     success: function (data) { 
      result = data; 
      console.log(beer); // returns beer 

     } 
    }); 
    console.log(result); // returns undefined 
    if (result) return result; 
})(); 
console.log(beer); // returns undefined 

回答

17

這裏面有興趣的功能一個異步請求,所以它會被解僱,但是你的腳本在繼續之前不會等待響應。如果您需要等待一個Ajax請求完成,嘗試這樣的事情:

var beer; 
$.getJSON(jsonUrl,function(json){ 
    beer = json; 
    checkDrink();     
});   

function checkDrink() { 
    console.log(beer); 
} 
+1

那麼我怎麼才能從函數之外的腳本中訪問啤酒? – Sebastien 2011-01-21 21:32:35

0

的問題是,你試圖訪問該數據實際上來自服務器返回之前,「成功」的功能其實是一個當Ajax調用成功完成時調用回調函數。在$阿賈克斯(或$不用彷徨)函數返回inmediatly ...

您將需要以某種方式發出信號,告知你得到了數據進入「啤酒」變種您的成功回調

1

推薦下面的代碼:

var beer = $.ajax({ 
    url: jsonUrl, 
    async: false, 
    dataType: 'json' 
}).responseJSON; 

的關鍵時刻是:

  1. 設置async到假,將結果作爲變量返回,而不是異步調用成功回調
  2. dataType設置爲json來解析服務器響應str作爲json