配列を含むJSONファイルを自分のサーバーからjavascriptオブジェクト変数にロードしたい。
ページの読み込み中にデータが必要になるため、ページの読み込みの開始時に同期的に実行したいと思います。
私はなんとかjQuery.getJSONを使用しましたが、これは非同期ajaxであり、少しやり過ぎのようです。
独自の解析を行わずに、JSONを同期してロードする方法はありますか?
(多かれ少なかれ<script language="JavaScript" src="MyArray.json"></script>
)
助けてくれてありがとう、私がjavascript初心者であるので、それが理にかなっていることを願っています。パオロ
getJSON()
は、単に_dataType:'json'
_が設定されたajax()
関数の省略形です。 ajax()
関数を使用すると、リクエストに関する多くのことをカスタマイズできます。
_$.ajax({
url: 'MyArray.json',
async: false,
dataType: 'json',
success: function (response) {
// do stuff with response.
}
});
_
まだ_async:false
_でコールバックを使用していますが、ajax呼び出しから実行が継続する前にコールバックが起動します。
どうぞ:
// Load JSON text from server hosted file and return JSON parsed object
function loadJSON(filePath) {
// Load json file;
var json = loadTextFileAjaxSync(filePath, "application/json");
// Parse json
return JSON.parse(json);
}
// Load text with Ajax synchronously: takes path to file and optional MIME type
function loadTextFileAjaxSync(filePath, mimeType)
{
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET",filePath,false);
if (mimeType != null) {
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType(mimeType);
}
}
xmlhttp.send();
if (xmlhttp.status==200)
{
return xmlhttp.responseText;
}
else {
// TODO Throw exception
return null;
}
}
注:このコードは、IE8、FF、Chrome、Opera、Safariなどの最新のブラウザーでのみ機能します。 obosoleteの場合IEバージョンはActiveXを使用する必要があります。必要であれば、その方法を説明します。)
何らかのサーバースクリプトを使用している場合は、ページ上のスクリプトタグにデータを印刷できます。
<script type="text/javascript">
var settings = <?php echo $json; ?>;
</script>
これにより、AJAXを非同期で使用するのではなく、データを同期的に使用できます。
それ以外の場合は、AJAXコールバックを待ってから、実行中の処理を続行する必要があります。
Json形式で提供される小さな入力ファイルを読み取り、少量のデータを抽出するだけで済みました。これは状況でうまくいきました:
jsonファイルはスクリプトと同じディレクトリにあり、data.jsonと呼ばれ、次のようになります。
{"outlets":[
{
"name":"John Smith",
"address":"some street, some town",
"type":"restaurant"
},
..etc...
次のようにデータをjsに読み込みます:
var data = <?php echo require_once('data.json'); ?>;
次のようなデータ項目にアクセスします。
for (var i in data.outlets) {
var name = data.outlets[i].name;
... do some other stuff...
}
RequireJSがオプションの場合、requirejsを使用して依存関係にすることができます。これを使用して、Angularアプリケーションでデータをモックします。モックされたデータの一部は、アプリのbootstrapの前にあることが重要です。
//Inside file my/shirt.js:
define({
color: "black",
size: "unisize"
});
JSONデータを定義でラップし、依存関係として宣言するだけです。詳細はこちら: http://requirejs.org/docs/api.html#defsimple