2011-01-21 47 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

+1

JSONリクエストの結果に依存するものはすべて、その別個の関数内にある必要があります。 – chprpipr

+0

なぜこれはうまくいかないでしょうか? \t \t \t \tビール= $アヤックス({ \t \t \t \t \t URL:jsonUrl、 \t \t \t \t \t成功:機能(データ){ \t \t \t \t \t \t戻りデータ; \t \t \t \t \t} \t \t \t}); – Sebastien

0

問題は、あなたはそれが実際にサーバから戻ってくる前に、データにアクセスしようとしているということである、「成功」の機能は、実際にはAJAX呼び出しが正常に完了したときに呼び出されるコールバックです。 $のアヤックス(または$に.get)関数が... inmediatly

を返すあなたはあなたの成功コールバック内で何とか「ビール」VARには、データを得た興味の機能に合図する必要があります

1

は、以下のコードを提案する:

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

キーモーメントは以下のとおりです。

  1. がにasyncを設定false、結果を変数として返す、成功コールバックを非同期呼び出しする
  2. dataTypeをjsonに設定してサーバレスポンスを解析するstr jsonとして
関連する問題