質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

1回答

3266閲覧

Nuxt.jsとaxiosで内部jsonからデーターを出力したい出力されない。

ttkun

総合スコア30

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

0クリップ

投稿2020/02/24 11:45

繰り返しデータをjsonにまとめaxiosで読み込み、v-forで出力しようと思い下記のように書いてみました。

参考URL
https://www.kipure.com/article/138/

index.vue

1<template> 2 <ul> 3 <li v-for="v-for="res in results""> 4 ID={{ res.id }}<br>name={{ res.name }}<br>check={{ res.check }} 5 </li> 6 </ul> 7 8</template> 9 10 11<script> 12import axios from "axios"; 13 14export default { 15 data () { 16 return { 17 results:[] 18 } 19 }, 20 mounted() { 21 axios.get("@/assets/json/menu.json") 22 .then(response => { 23 this.results = response.data 24 console.log(response.data) 25 }) 26 }, 27 computed: { 28 processedPosts() { 29 let posts = this.results; 30 } 31 } 32} 33</script>

File構成は下記の部分にjsonファイルを格納

assets - json - menu.json

そうすると下記のようなエラーが2つ出ました。
xhr.js?b50d:178 GET http://localhost:3000/@/assets/json/menu.json 404 (Not Found)
イメージ説明

createError.js?2d83:16 Uncaught (in promise) Error: Request failed with status code 404
at createError (createError.js?2d83:16)
at settle (settle.js?467f:17)
at XMLHttpRequest.handleLoad (xhr.js?b50d:61)

これによる疑問ですが
①なぜ内部フォルダにあるjsonが読み込めないのでしょうか?
②下のエラーを調べてみるとaxios関係のエラーのようでした。
ひょっとして内部jsonファイルは別のaxiosを使わずとも別の使い方があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

対応方法は二通りあります。

一つ目は、質問者様の言葉をお借りするなら「内部リソース」として、ビルド時に json を取り込んでしまう方法で、以下のようにすることで json データにアクセスできます。

vue

1<script> 2import results from '@/assets/json/menu.json' 3 4export default { 5 data() { 6 return { 7 results 8 } 9 }, 10 // 略 11} 12</script>

ビルド時点でリソースを取り込む場合は、(Nuxt.js のデフォルト設定ではおそらく)上述のように '@' をプロジェクトのルートとして解釈する機能が有効になりますので、json データを取り込めます。

二つ目は、実行時にデータを取得する方法で、以下のように '@' を利用せず、素直に絶対パスで指定するか、ページのパスからの正しい相対パスを記載することで適切に動作します。

vue

1<script> 2import axios from 'axios' 3 4export default { 5 mounted() { 6 // 以下の絶対パスは、このサイトが設置されるサーバー上の 7 // パスを加味して適切に修正する必要があります。 8 // 以下の例はサイトがサーバーのルートに設置される場合に 9 // 適切に動作します 10 axios.get('/assets/json/menu.json') 11 .then(/* 略 */) 12 } 13}

投稿2020/02/24 12:39

R.Mizukami

総合スコア1086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問