私は非常に単純なことをしなければなりませんが、私が知る限り、これを行う簡単な方法はないようです。リモートソースからJSONデータをロードし、jQueryを使用してグローバルJavascript変数に格納するだけです。ここに私が持っているものがあります:
var my_json;
$.getJSON(my_url, function(json) {
var my_json = json;
});
My_json変数は未定義のままです。これは明らかにスコープの問題だと思います。 $ .getJSONメソッドはJSONを返すはずですが、XMLHttpRequestオブジェクトを返します。これを行う場合:
request = $.getJSON(my_url);
my_json = request.responseText.evalJSON();
Readystate == 4になるまでresponsetextがnullのままになるため、これは機能しません。成功すると起動するため、応答テキストを返すにはコールバック関数を使用する必要があるようです。
これは難しいことはできません!右?
これはそれを行います:
var json = (function () {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': my_url,
'dataType': "json",
'success': function (data) {
json = data;
}
});
return json;
})();
主な問題は$.getJSON
が非同期で実行されるため、Javascriptはsuccess
コールバックが起動する前でもそれを呼び出す式を通過するため、変数がデータをキャプチャする保証はありません。
特に、上記のajax呼び出しの'async': false
オプションに注意してください。 manual の意味:
デフォルトでは、すべてのリクエストは非同期で送信されます(つまり、これはデフォルトでtrueに設定されています)。同期要求が必要な場合は、このオプションをfalseに設定します。同期リクエストは一時的にブラウザをロックし、リクエストがアクティブな間はアクションを無効にすることに注意してください。
コードビットは次のようになります。
var my_json;
$.getJSON(my_url, function(json) {
my_json = json;
});
var itens = null;
$.getJSON("yourfile.json", function(data) {
itens = data;
itens.forEach(function(item) {
console.log(item);
});
});
console.log(itens);
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
</head>
<body>
</body>
</html>
これで、このsample_dataにはJSONファイルの値が含まれます。
var sample_data = ''; $.getJSON("sample.json", function (data) { sample_data = data; $.each(data, function (key, value) { console.log(sample_data);