2011-07-26 10 views
1

どのようにjsグローバル変数をjson結果セットにonloadイベントで設定するのですか?値が負荷に設定されていないグローバルjavascriptのグローバル変数をJSONresultに設定しますか?

var global = []; 

    $.getJSON("<%: Url.Action("myUrl", "con") %>/", 
    function(data) { 
      $.each(data, function(key, val) { 
      global.push(val); 
      }); 
    }); 

は、私はあなたが、アレイにグローバルに設定する必要はありません

+0

コード音がする。また、JSONが有効であることを確認してください(http://jsonlint.com/) – ctrlShiftBryan

答えて

2

もう一度。たぶん試してみる

var result; 
$.ajax({ 
    url: '<%: Url.Action("myUrl", "con") %>/', 
    dataType: 'json', 
    async: false, 
    success: function(data) { 
     result = data; 
    } 
}); 
// process result here 
+0

これは、他のメソッドでアクセスしようとすると、値を持つajax呼び出しの直後に結果にアクセスするときに結果を設定します。 –

+0

他のメソッドではアクセスできないようです「グローバルに」設定されているようですか? –

+0

'result'をグローバルにしたい場合は' var'を削除してください。 – marc

0

... JSON呼び出し外でそれにアクセスする必要があります。値を割り当てるだけです。

var global = null; 

    $.getJSON("<%: Url.Action("myUrl", "con") %>/", 
    function(data) { 
      $.each(data, function(key, val) { 
      global = val; 
      }); 
    }); 
+0

これは 'global'が* last *値を反復する結果となります(' data'がオブジェクトであると仮定すると反復順序は未定義です。配列]、これは混沌とした動作を引き起こす可能性があります)。 –

+0

ああ、私はそれぞれを逃した。それを指摘してくれてありがとう。 –

0

そのコードは正常に動作するはずです。 (Live copy)期待どおりのフォームでデータを返さないajax呼び出しに問題があるように思えます。

0

@marc(間接的)点として、ajax呼び出しとイベントモデルの性質を理解する必要があります。 JSファイルが解析されるとすぐにajax呼び出しが実行され、結果はと非同期で返されます。したがって、コードのタイムラインは次のようになります

00 set global = [] 
01 AJAX call /someurl/ -------------------\ 
02 check global /* it's empty */   \ 
03 do something else     [process AJAX call on server, send result] 
...          /
42 AJAX call is completed <----------------/ 
43 call success ----------------------------------> global.push(result) 
44 at this point of time you can access global 

これは実行時ではなくタイムラインです。 AJAX呼び出しと応答の間の時間は、タイムアウトやサーバー側のエラーの場合を含めて任意である可能性があります。

どうすればよいですか?

1)JSの通常solurtion - あなたはすでにでき

1.1のいずれかを持って、コールバック、成功関数が)グローバル設定および他の関数を呼び出す、または

1.2)は、データを用いて所望の動作を行います

2)イベント - これが99%に避けるべきである - あなたは@marcが示唆するように、jQueryのイベント機構に

3)同期呼び出しを読んで、コードの複数の部分のデータを使用すると仮定した場合、より良いですケース。私が知っている唯一のケースは、サードパーティーのソースからの必須データを要求しなければならない場合です。この場合でも、サーバー上で実行できます(少なくとも同期AJAXは受け入れられますが)