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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

Q&A

解決済

3回答

1647閲覧

jsonとJQueryを使ってhtmlを生成

ysfree14

総合スコア19

JSON

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

0グッド

1クリップ

投稿2019/05/25 06:32

編集2019/05/27 00:47

jsonとjQueryを使ってindex.htmlにコードを生成させたいのですが、コードが生成されません。
ローカル上ではなく、同一ドメインのサーバーへ上げて確認しています。
どのようにすれば実装できますか?

json

1{"release": [ 2 3{ 4"tabName": "new-tab", 5"url": "url", 6"img": "src", 7"labelName": "new-label", 8"dateText": "5/24新作", 9"price": "3,132" 10}, 11 12{ 13"tabName": "new-tab", 14"url": "url", 15"img": "src", 16"labelName": "new-label", 17"dateText": "5/24新作", 18"price": "3,132" 19}, 20 21{ 22"tabName": "new-tab", 23"url": "url", 24"img": "src", 25"labelName": "new-label", 26"dateText": "5/24新作", 27"price": "3,132" 28} 29 30]}

jQuery

1$(document).ready(function(){ 2 3 //HTMLを初期化 4 $(".json-box").html(""); 5 6 //HTMLを生成 7 $.getJSON("json/index/index.json", function(data){ 8 $(data.release).each(function(){ 9 $('<div class="col1' + this.tabName + 'tab-elm" data-category="' + this.tabName + '">'+ 10 '<a href="' + this.url + '" target="_top" class="block">'+ 11 '<img src="' + this.img + '" alt="">'+ 12 '</div>'+ 13 '<div class="label-wrap">'+ 14 '<p class="img-label' + this.labelName + '">' + this.dateText + '</p>'+ 15 '</div>'+ 16 '<p class="price-text">' + this.price + '</p>'+ 17 '</a>'+ 18 '</div>').appendTo('.json-box'); 19 }) 20 }) 21 });

html

1<div class="json-box"></div>

html

1<div class="col1 new-tab tab-elm" data-category="new-tab"> 2<a href="url" target="_top" class="block"> 3<div class="product-img img-col1"> 4<img src="src" alt=""> 5</div> 6<div class="label-wrap"> 7<p class="img-label new-label">5/24新作</p> 8</div> 9<p class="price-text">3,132円<span>税込</span></p> 10</a> 11</div> 12

最後の分は実現させたいコードです。
よろしくお願い致します。

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

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

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

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

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

m.ts10806

2019/05/25 07:35

「うまくいかない」だけでは何も伝わらないので起きている現象、エラーナドを確認して追記してください。
miyabi_takatsuk

2019/05/25 11:23

もしかして、ローカル上だったりしますか? コンソールでエラーが出ているのであれば、それも含め、質問本文に記載をお願いします。 質問文は編集が可能です。 ローカルなのかどうか、と、エラー内容、を質問本文に追記してください。
ysfree14

2019/05/27 00:44

ローカル上ではありません。エラー自体は何もコンソールに出ていない状態です。 もしかしたらjsonファイル自体の読み込みがうまくできていないのかもしれません。
ysfree14

2019/05/27 01:08 編集

下記のようなソースで再度確認してみたのですが、Uncaught ReferenceError: data is not definedというエラーがコンソールで表示されました。 ファイルのパスなどは合っている状態です。 $(document).ready(function(){ var data = $.getJSON('json/index/index.json'); //HTMLを生成 $(data.release).each(function(){ $('<div class="col1' + this.tabName + 'tab-elm" data-category="' + this.tabName + '">'+ '<a href="' + this.url + '" target="_top" class="block">'+ '<img src="' + this.img + '" alt="">'+ '</div>'+ '<div class="label-wrap">'+ '<p class="img-label' + this.labelName + '">' + this.dateText + '</p>'+ '</div>'+ '<p class="price-text">' + this.price + '</p>'+ '</a>'+ '</div>').appendTo('.json-box'); }); });
miyabi_takatsuk

2019/05/27 01:26 編集

当方のローカルサーバー環境にて、質問者さんの初期に記載していただいたコードで問題なく、 HTMLが生成されました。 エラーなしで、HTMLが生成されない、か・・・。 サーバーで、jsonファイルのアクセスに対して、許可していない、ないし、jsonとして返さない、などの設定がされてたりしないでしょうか? また、jQueryの読み込みが正しく行われているか、ご確認お願いします。 (といっても、この二つがなってないなら、そもそもエラー起きますが・・・一応確認)
m.ts10806

2019/05/27 01:27

jQueryのバージョンとかも以外ときいてるかもしれないですしね。(質問には提示されていない環境情報の1つ) HTMLもなぜか切れて提示されているのも気になります。 DOCTYPE宣言から</html>まで全部出してもらうしかないです。
miyabi_takatsuk

2019/05/27 01:39

mts10806さん>ですね。 質問者さん、どうか、HTMLの記載もお願いします! そして、コメントでいただいてるコードがなぜエラーが起きているかというと、$.getJSONメソッドは、非同期処理といって、処理待ちをせず次の処理ができる処理のため、 data変数の中身が入る前に、 $(data.release)...が実行されてしまっているからかと思います。
guest

回答3

0

ローカル領域かどうかの確認に対して、お答えいただいておりませんが、
ひとまず、今回のajaxを使用しての、json取得は、ローカルでは動きません
厳密には、CORSによって、ローカルファイルに対してのajax通信には、ブラウザ側で制限されているからです。
(ローカルでなくても、別ドメインに対してのajax通信も同様に制限がかかる)
これは、セキュリティの問題です。

よって、ローカルにおいては、ブラウザを起動するときにローカルファイルにアクセスできるよう、オプション起動するか、
ローカルサーバーを立て、起動し、同ドメイン上という形で行うしかありません。
(Webサーバーで、別ドメインのファイルに対してajaxするなら、お互いのサーバーサイドで、通信することを許可しなければならない)

ただし、それで質問者さんが書いたスクリプトが動くかどうかはわかりません。
なぜなら、今回のご質問の内容では、この回答が限界だからです。
(多分、ajax通信さえうまく言ってれば、動くような気がします。jQuery読み込んでないとかだったら、それもエラー内容記載いただかないとわかりません)
これ以上の正確な回答を得たいのならば、
コンソールエラー内容の記載と、ローカルなのか、ローカルサーバーなのか、Webサーバーなのかの、記載をお願いいたします。

投稿2019/05/25 12:23

miyabi_takatsuk

総合スコア9528

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

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

hentaiman

2019/05/25 15:35

エスパー回答見たらなんかうまく行かない理由と自分の回答が伝わらない理由に納得した
miyabi_takatsuk

2019/05/25 15:59

w エラー内容記載してくれれば一発で状況わかるんですけどね。 ここまで考えねばならんのか、っていつも思います。
m.ts10806

2019/05/27 00:55

それはもうやはり環境含めて他人が完全再現できる情報を提供してもらうしかないですね。
miyabi_takatsuk

2019/05/27 01:24

まいった、私のサーバー環境で、問題なくHTML生成されてしまった。 mts10806さんの言う通り、環境含めて情報提供してもらうしかないですね・・・。
guest

0

自己解決

楽天GOLD上でテストを行っていたのですが、そこでなぜかパスがおかしくなっていまして
JSONの取得を相対パスから絶対パスに変更することで解決できました。

ありがとうございました。

投稿2019/06/11 05:59

ysfree14

総合スコア19

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

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

0

ただの構文ミスのようですが

//dataは直接jsonを入れておくとして // $.getJSON("json/index/index.json", function(data){ $(data.release).each(function(){ $('<div class="col1' + this.tabName + 'tab-elm" data-category="' + this.tabName + '">'+ '<a href="' + this.url + '" target="_top" class="block">'+ '<img src="' + this.img + '" alt="">'+ '</div>'+ '<div class="label-wrap">'+ '<p class="img-label' + this.labelName + '">' + this.dateText + '</p>'+ '</div>'+ '<p class="price-text">' + this.price + '</p>'+ '</a>'+ '</div>').appendTo('.json-box'); // }) // })←ひとつ余分 });

投稿2019/05/25 06:48

hentaiman

総合スコア6415

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

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

ysfree14

2019/05/25 08:39

ご回答ありがとうございます。 一つ余分のところを消すと、Uncaught SyntaxError: Unexpected end of inputのエラーが表示されてしまいます。 dateは直接jsonをいれておくということは、どういうことでしょうか?
hentaiman

2019/05/25 08:43

var data = ここで質問文に書いてあるjsonを代入 単にajaxで試す環境用意するのがだるかったので そして構文エラーになります?こっちはajaxの部分以外丸々コピーしてカッコ揃えたら動いたけどな~
ysfree14

2019/05/27 01:08 編集

下記のようなソースを入れてみたのですが、コンソールにUncaught ReferenceError: data is not definedというエラーが表示されました。 パスなどは合っているのですが、、 $(document).ready(function(){ var data = $.getJSON('json/index/index.json'); //HTMLを生成 $(data.release).each(function(){ $('<div class="col1' + this.tabName + 'tab-elm" data-category="' + this.tabName + '">'+ '<a href="' + this.url + '" target="_top" class="block">'+ '<img src="' + this.img + '" alt="">'+ '</div>'+ '<div class="label-wrap">'+ '<p class="img-label' + this.labelName + '">' + this.dateText + '</p>'+ '</div>'+ '<p class="price-text">' + this.price + '</p>'+ '</a>'+ '</div>').appendTo('.json-box'); }); });
hentaiman

2019/05/27 01:37

> var data = $.getJSON('json/index/index.json'); そういう事ではないんです。 jsonのデータが本当に正しく返されている前提で以下のように直接変数にいれたんです。 ====== var data = {"release": [ { "tabName": "new-tab", "url": "url", ~略~ "price": "3,132" } ]} ====== コード自体は質問文にあるようなコールバックの書き方で正解です。 もしも var data = $.getJSON('json/index/index.json'); こういう書き方をするなら、optionパラメーターのasyncをfalseにしないといけません。 非同期通信をoffにしないと、dataに中身が入る前に次の処理のeachループに行ってしまうのでエラーになります。 (パラメーターの詳細はAPIドキュメントみてね) まずは $(data.release).each(function(){から}までの処理を全部取っちゃって、dataをconsole.logで確認してみてはどうでしょう? dataが無いならajax周りを見直しましょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問