4

json 応答をグローバル変数に保存したいので、getJSON 要求を複数回行わなくてもアプリで使用できます。

var data;
$.getJSON("panorama.json",function(json){
data = json.images[0].src;
console.log(data);          
});


console.log(data);

実際のリクエストでそれをログに記録すると問題ありませんが、他の場所では「未定義」になります。コメントはありません。

編集[コメントからコピー]:試してみました...

$.myglobals = { result: "unset" } 

$(document).ready(function() { 

  $.getJSON( "panorama.json", function(json) { 
    $.myglobals.result = json.images[0].src; 
    console.log($.myglobals.result);     
  });

  console.log($.myglobals.result); 
}) ;

最初のログは問題ありませんが、2 番目のログは未定義です。

編集[回答からコピー]:

実際には両方の方法が機能しました

興味深いのは、リクエストが関数内にあり、同じ関数内のリクエストの直後にグローバル変数にアクセスしようとしたことです

関数の外でアクセスすると、魔法のように機能しました

4

4 に答える 4

1

これを DOM の属性 (#ID など) に挿入し、必要に応じて取得できます。

于 2009-06-19T18:21:29.757 に答える
0

これは、ある $(document).ready() で変数を設定し、別の $(document).ready() で使用できるアプローチです。 myglobals特に「myglobals」よりも賢い名前を付けた場合、グローバル変数が他の誰かのグローバル変数と衝突する可能性をほぼ間違いなく減らす名前空間オブジェクトです。

$.myglobals = {
  result: "unset" 
}

$(document).ready(function() {

  function pretend_JSON_call() {
    $.myglobals.result = {'a':"hello", 'b':"world" };
  }

  pretend_JSON_call();
});

$(document).ready(function() {
  alert($.myglobals.result['a']);
  alert($.myglobals.result['b']);
});

jsbin 内の上記コードへの一時的なリンク。

于 2009-06-19T18:23:57.833 に答える