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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JSON

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

1回答

499閲覧

外部ファイルのjsonデータの表示

hiroshi3324

総合スコア14

JSON

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2018/04/23 19:32

編集2022/01/12 10:55

現在ポートフォリオサイトを作っていましてそこで完成予想図としてはインスタグラムみたいな画像を並べて表示したくてbootstrapのグリッドシステムで均等に配置するという感じでそこの部分はできたのですが今後の保守的なことやhtmlファイルが長くなりそうなのでまとめようと思い外部からのjsonファイルを使用してjqueryで表示させたい思いプログラムを実行してみましたがうまくいきません。
わかりにくいかもしれませんがhtmlの方のaタグのid=jsonDataの方にそれぞれの画像とタイトルを格納して行く感じになっています。現状は一つ格納できておらずjsonデータの最後の方を表示しているので繰り返し回っているけど一つずつ上書きされているのかなっという印象です。
わかりにくいコードだとは思いますが何卒よろしくお願いいたします。

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>ポートフォリオサイト</title> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css"> 8 <link rel="stylesheet" href="./css/jquery-ui.min.css"> 9 <link rel="stylesheet" href="./css/style.css"> 10 11 <!-- Meta --> 12 <meta name="description" content="ポートフォリオサイトです。"> 13 <meta name="keywords" content="キーワード"> 14 <meta name="language" content="ja"> 15 16 <!-- Favicon --> 17 <link rel="shortcut icon" href="http://example.com/imgs/favicon.ico"> 18 <link href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" rel="stylesheet"> 19</head> 20<body> 21 22<div class="main"> 23 <div class="container"> 24 <div class="row"> 25 <a id="jsonData" href=""> 26 </a> 27 <a id="jsonData" href=""> 28 </a> 29 <a id="jsonData" href=""> 30 </a> 31 <a id="jsonData" href=""> 32 </a> 33 <a id="jsonData" href=""> 34 </a> 35 <a id="jsonData" href=""> 36 </a> 37 <a id="jsonData" href=""> 38 </a> 39 </div> 40 </div> 41</div> 42 43 <script src="jquery-2.1.3.min.js"></script> 44 <script src="./bootstrap/js/bootstrap.min.js"></script> 45 <script src="jquery-ui.min.js"></script> 46 <script src="main.js"></script> 47</body> 48</html>

js

1$(function() 2 { 3 $.ajax({ 4 type: 'post', 5 url: 'json/contents.json', 6 async: true, 7 cache: false, 8 dataType: 'json', 9 scriptCharaset: 'utf-8', 10 success: function(data) 11 { 12 for(var i=0;i<data.length;i++) 13 { 14 var imgCol = $('<div></div>').attr({'class':'col-md-4 imgCol'}); 15 var imgcontainer = $('<div class="imgContainer"></div>'); 16 imgcontainer.append(($('<img>').attr({"src":data[i]["img"],"width":"100%","height":"350px"}))) 17 .append('<div class="imgCover"><div class="coverTitle">'+data[i]["title"]+'</div></div>'); 18 imgcontainer.appendTo(imgCol); 19 } 20 imgCol.appendTo($('#jsonData')); 21 }, 22 }) 23 }); 24 25

json

1[ 2 3 { 4 "img": "./imgs/a.jpg", 5 "title": "a" 6 }, 7 { 8 "img":"./imgs/b.jpg", 9 "title":"b" 10 }, 11 { 12 "img":"./imgs/c.jpg", 13 "title":"c" 14 }, 15 { 16 "img":"./imgs/d.jpg", 17 "title":"d" 18 }, 19 { 20 "img":"./imgs/e.jpg", 21 "title":"e" 22 }, 23 { 24 "img":"./imgs/f.jpg", 25 "title":"f" 26 }, 27 { 28 "img":"./imgs/g.jpg", 29 "title":"g" 30 } 31] 32 33

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

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

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

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

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

hiroshi3324

2018/04/24 02:20

そうですよね!今の現状の状態を記載しました。よろしくお願いします。
guest

回答1

0

取得できているのであれば単純に出力のタイミングなのでは?

javascript

1for(var i=0;i<data.length;i++) 2{ 3 var imgCol = $('<div></div>').attr({'class':'col-md-4 imgCol'}); 4 var imgcontainer = $('<div class="imgContainer"></div>'); 5 imgcontainer.append(($('<img>').attr({"src":data[i]["img"],"width":"100%","height":"350px"}))) 6 .append('<div class="imgCover"><div class="coverTitle">'+data[i]["title"]+'</div></div>'); 7 imgcontainer.appendTo(imgCol); 8} 9imgCol.appendTo($('#jsonData'));

この書き方だとforの中でひたすら上書きを繰り返すので、

javascript

1for(var i=0;i<data.length;i++) 2{ 3 var imgCol = $('<div></div>').attr({'class':'col-md-4 imgCol'}); 4 var imgcontainer = $('<div class="imgContainer"></div>'); 5 imgcontainer.append(($('<img>').attr({"src":data[i]["img"],"width":"100%","height":"350px"}))) 6 .append('<div class="imgCover"><div class="coverTitle">'+data[i]["title"]+'</div></div>'); 7 imgcontainer.appendTo(imgCol); 8imgCol.appendTo($('#jsonData')); 9}

for内部の最後に出力するようにすれば1件ずつ出ると思います。

検証していないので間違ってたら申し訳ないです。

投稿2018/04/24 03:08

stampdoor

総合スコア483

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

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

hiroshi3324

2018/04/24 05:05

回答ありがとうございます。無事うまくいきました。 あとaタグのところのhrefをjsonから読み込んでそれぞれ別のリンクを読み込ませたいのですがどうすればいいでしょうか?質問ばかりですいません。
stampdoor

2018/04/24 07:36

aタグのhrefに読み込む、というよりは同じくjsonでforを回したほうが良いのでは? というかそもそもaタグにそれぞれidが割り振られていてよろしくないので、 aタグも含めてfor文の中に入れ込んで、.attr('href', data[i]["href"])とする。 (jsonにもhrefを追加しておく) <div class="row">に何かしらのidをつけてそこにappendToすればよいかと。 こうしておけばjsonの内容分だけ出力するので、空のaタグが発生する恐れもないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問