2016-05-07 7 views
0

私のページが読み込まれると、すぐに$ .ajax()を使用して別のサーバーからJSONデータを取得したいので、jsonファイルを再要求することなくすべてのデータにアクセスできるようにしたいと思います。問題は、変数にデータを代入すると、その変数のスコープが$ .ajax()関数に限定され、他の場所にアクセスできなくなるためです。外部JSONを一度ロードし、繰り返し使用します。

私はすでにその情報をロードして、何度も何度でもそれを再利用することなく(遅く)使用することができるはずです。私はdocument.readyの(外それを実行した場合

$(document).ready(function(){ 
    $.ajax({ 
     type: "GET", 
     url: 'https://www.reddit.com/.json', 
     timeout:3000, 
     dataType: 'JSON', 
     jsonpCallback: 'callback', 
     success: function(data) { 
      console.log(data); 
      var myData = data; //this variable is confined :(
     }, 
     error: function(){ 
      console.log('error'); 
     } 
    }); 
}); 

下回っ例えば、単純なreddit.json要求を使用して)、その後、私は世界的にそれを得ることができますが、それはクールだった場合、私は知りませんでしたかない、またはあなたが知っている、ベストプラクティスのような...

いただきました、それは最初の要求だ作られた機能の範囲外既にロードされたJSONオブジェクトにアクセスするための最良の方法は?それとも可能なのか...?

+0

Ajaxリクエストが完了した後にのみデータにアクセスできることが保証されている限り、必要な場所に保存できます。例えば。イベントハンドラ内のデータにアクセスする必要がある場合は、要求が完了した後にのみイベントハンドラをバインドします。 –

+0

グローバル変数を使用する場合、JSONデータは、任意の呼び出し元との間で共有できます。 – Sparky256

+0

関連:[非同期呼び出しからの応答を返すにはどうすればいいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call/14220321 ) –

答えて

0

からアクセスできるグローバルな配列にそれを置くことができます。

1. $(document).ready()関数の前にグローバル変数を宣言します。

<script> 
var myData; 
$(document).ready(function(){ 
$.ajax({ 
    type: "GET", 
    url: 'https://www.reddit.com/.json', 
    timeout:3000, 
    dataType: 'JSON', 
    jsonpCallback: 'callback', 
    success: function(data) { 
     console.log(data); 
     myData = data; //this variable is confined :(
    }, 
    error: function(){ 
     console.log('error'); 
    } 
}); 
}); 
</script> 

2.必要に応じてHTML5セッションストレージまたはローカルストレージにデータを配置します。以下のようにします。

<script> 
$(document).ready(function(){ 
$.ajax({ 
    type: "GET", 
    url: 'https://www.reddit.com/.json', 
    timeout:3000, 
    dataType: 'JSON', 
    jsonpCallback: 'callback', 
    success: function(data) { 
     console.log(data); 
     sessionStorage.myData=data; //setting variable in session storage 
     console.log(sessionStorage.myData); // getting variable from ss 
     // for local storage replace sessionStorage with localStorage in above two lines 
    }, 
    error: function(){ 
     console.log('error'); 
    } 
}); 
}); 
</script> 
+0

これは私のプロジェクトを稼働させていますが、リンクされた投稿をチェックアウトします@FelixKling dropped私の最初の質問の下に...本当に良い情報があります。 方法1を使用しました... – TJBlackman

0

ロードAjaxですべてのものと、あなたはそれをファイルに書き込み、またはあなたは下記の二つのオプションのいずれかを使用することができますどこにでも

関連する問題