質問: 0; i < data.length; i++){ console.log('私の名前は' + data[i]['name'] + 'です。'); console.log('年齢は' + data[i]['age'] + '歳です。'); } }, function() { console.log('読み込みに失敗しました'); } ); ```
回答: 参考にすべきは`.then(関数)`です。 質問文の書き方では非同期を上手く処理出来ないので`.then()`で包むというのもちゃんと参考するか、 もっとJavaScriptの事を勉強して非同期処理をどう処理するのか覚えましょう。 ちなみに`.then(関数)`を使った非同期処理を実現する機能をPromiseと呼びます。 データの扱いに関しては下記を参考にしてください。 JavaScriptは非同期処理を実現するために、 関数やメソッドの引数にコールバック関数を設定するという思想があります。 このコールバック関数は全然別の世界に受け渡されて、 実行しても良いタイミング(Ajax通信を行い、結果が帰ってくる)によく分からない場所で実行されます。 つまり、この世界の外にはもう帰ってこれません。 これが「コールバック地獄」と呼ばれる地獄の入り口です。 コールバック関数内でやりたい事が増えると、延々とコールバック関数内のコードが肥大し読みづらくなります。 読めないコードは修正や改善も不可能で、現場では数多くの悲劇を生み出してきました。 「コールバック地獄」で調べればこのコールバック地獄とどう付き合うのか、 テクニックを含めて色々出てきますので、やりたいことが増えたら調べてみてください。 ``` $.ajax({ // json読み込み開始 type: 'GET', url: './data/data.json', dataType: 'json' }).then(function (data) { // 確実にthen(関数)という書き方で繋げること var place_obj = data[0]; // 最初の値は[0]の添字でアクセスすればいい。 data = data.slice(1); // 1行目のデータを捨てたいならArray.prototype.sliceを使う // 非同期関数に一度入ると外の世界には帰ってこれないので、 // place_objやdataを扱いたい場合は全てこの中に記述すること console.log(place_obj); console.log(data); }); ```