-1
    function getData(jsonAddress) {
      var data = new Array();
      var xhr = $.getJSON(jsonAddress, function(meas) {
        for (var i = 0; i < meas.length ; i++) {
          var dt = datetimeSplitter(meas[i].valuedate);
          data[i] = [Date.UTC(dt[0],dt[1]-1,dt[2],dt[3],dt[4],dt[5]),parseInt(meas[i].value,10)];
        };
      });
      alert(data);
    }

変数「データ」を関数で使用できるようにして、getDataそれを返すことができるようにしたいと思います (この場合はアラート)。これは範囲の問題であり、閉鎖によって解決できることを理解しました。クロージャーとは何かも理解しましたが、この特定のケースの構文は絶対にわかりません。

4

3 に答える 3

5

これはスコープの問題ではなく、非同期コールバックの問題です。

呼び出しの応答を取得するには、このメソッドにコールバック関数を渡す必要がありますgetJSON()

于 2012-10-08T00:45:32.077 に答える
3

$.getJSON(jsonAddress, function(meas)....は非同期呼び出しです。つまり、コールバック関数 (応答値でデータが設定される場所) が呼び出される前に、alert ステートメントが呼び出されます。アラートをコールバック関数内に移動すると、正しい値が含まれていることがわかります。

于 2012-10-08T00:48:03.207 に答える
0

以前に何度も提案されたような非同期呼び出しを実際に使用できない場合は、代わりに ($.ajax)[http://api.jquery.com/jQuery.ajax/] を使用することもできます- $.getJSON は単なるブラウザが同期的にデータを取得している間、アプリケーションがブロックされるため、これは推奨される方法ではないことに注意してください。

于 2012-10-08T01:16:00.020 に答える