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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JSON

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

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3422閲覧

jQuery、jsonを使いボタンでオンオフできるメンバーリストを作成したい

tototo6

総合スコア7

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JSON

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

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/01/06 15:49

編集2017/01/08 00:31

###実現したいこと
社内ホームページのようなものを作成しており
社員表をjQuery、jsonを利用し、作成しましたが
ローカルで確認をしたところ、Firefoxでは期待する表示がされましたが、
safariでは表示がされませんでした。(当方mac環境)
chromeではローカルでjsonが確認できないということなので表示されませんでした。

###発生している問題・エラーメッセージ
リストボタンのオン、オフで表示、非表示の切り替えをできるようにしたいのですが
最初のoff状態からonに切り替えても反応をしません。

###該当のソースコード(json)

[{ "a": "○○課", "aa": [ { "name": "ああ", "skill": "いい", "date": "うう" }, { "name": "ええ", "skill": "おお", "date": "かか" } ], "b": "△△課", "bb": [ { "name": "きき", "skill": "くく", "date": "けけ" }, { "name": "ここ", "skill": "ささ", "date": "しし" } ], "c": "□□課", "cc": [ { "name": "すす", "skill": "せせ", "date": "そそ" }, { "name": "たた", "skill": "ちち", "date": "つつ" } ] }]

###該当のソースコード(jQuery)

// toggleの代わり $.fn.clickToggle = function (a, b) { return this.each(function () { var clicked = false; $(this).on('click', function () { clicked = !clicked; if (clicked) { return a.apply(this, arguments); } return b.apply(this, arguments); }) }) } // list選択時のボタンのonoff $(function(){ $('.btn').on('click', function(){ $(this).toggleClass('btn_active'); }); }); $(".view").on("click",function(){ $(this).toggleClass("open close"); }); // 空のdivにデータにjsonを渡す $(function() { $('#button_1').clickToggle(function(){ $.getJSON("./json/xxx.json",function(list){ for(var i in list) { var o = '<p>課:' + list[i].a + '</p>' $("div#a_a").append(o); for(var j in list[i].a) { var h = '<div>' + '<div>' + list[i].a[j].picture + '</div>' + '<dl>' + '<dt>' + list[i].a[j].name + '</dt>' + '<dd>' + '<span>名前:</span>' + list[i].a[j].here_date + '</dd>' + '<dd>' + '<span>年齢:</span>' + list[i].a[j].blood_type + '</dd>' + '</dl>' + '</div>' $("div#a_a").append(h); } } }); }, function() { $("div#a_a").empty(); } ); });

###該当のソースコード(html)

<section> <ul> <li> <button type="button" name="○○課" class="btn" id="button_1"> ○○課 </button> </li> <li> <button type="button" name="△△課" class="btn" id="button_2"> △△課 </button> </li> <li> <button type="button" name="□□課" class="btn" id="button_3"> □□課 </button> </li> </ul> <div> <div id="a_a"></div> <div id="b_b"></div> <div id="c_c"></div> </div> </section>

###補足
色々ネットで調べたところ、.ajaxを使えば良いかと思ったのですが
.ajaxは文字化けした際や詳細なオプションを指定する際に使うもので
今回のような簡単なjsonを読み込む際は.getJSONで良いものなのでしょうか?

.getJSONのまま間違いを正し、各ブラウザで正常に動作できることはできるのでしょうか?
お手数をおかけいたしますが、ぜひご教授ください

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

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

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

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

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

guest

回答1

0

ベストアンサー

ブラウザの開発ツール(デベロッパーツール、Webインスペクタ等、Safariでは環境設定の詳細でメニューバーの"開発"を有効にする必要がある)のコンソールログに何かしらのエラーが出ていないでしょうか?もし、JSON.parse()のエラーが出ていれば下記を確認してください。

JSONのシンタックスが間違っており、シンタックスエラーが発生し、解析に失敗したと推測されます。jsonlint等とツールでシンタックスチェックを行ってください。オンラインであれば、JSONLint PRO - The JSON Validatorで簡単に確認できます。少なくとも、質問文のJSONにはシンタックスの間違いがあります。

jQuery.getJSON()jQuery.get()を経由して、jQuery.ajax()を使っているだけですので、細かいオプションが不要であれば、jQuery.getJSON()を使用しても問題ありません。これらの関数では、GETで入手したデータをJSON.parse()を使ってJSONを解析し、JavaScriptでのオブジェクトに変換しています。もし、JSON.parse()が解析に失敗した場合、うまくデータを渡すことはできませんので、正しいJSONを渡す必要があります。

JSONはJavaScriptの文法と互換ではありますが、JavaScriptよりも制限されておりとてもシビアです。例えば配列について、[2,3,5,]のような余計なカンマはJavaScriptでは許されますが、JSONでは許されません。他にもコメントが使えないなどの制限があります。JSONを手動で作っている場合は、このようなシンタックスの間違いは気付きにくいですので、必ずチェックツールを使ってチェックすることをお勧めします。エディタによってはチェックのプラグインも用意されていますで、積極的にご利用ください。

もし、何らかの元データ(エクセルとかDBとか)がある場合は、そこから正しいJSONを自動生成できるように考えたほうがいいでしょう。人が手動で管理できるJSONは設定に使う規模ぐらいまでであり、大きなデータの管理を手動で行うには向いていません。何らかの自動化を検討してください。

投稿2017/01/06 22:20

編集2017/01/06 22:24
raccy

総合スコア21735

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

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

tototo6

2017/01/08 00:44

ご回答ありがとうございます。 お伝えいただいたValidatorで確認させていただいたところ、 大元のデータの方ではエラーが出ず、JSONではエラーが確認できませんでした。 (質問したコードはエラー出たので、その箇所の修正をしました) また、safariの開発ツールで確認したところ、 Failed to load resource: Preflight response is not successful と表示され、該当のファイルは使用しているJSONデータでした。 上記については、Validatorでは一応エラーが出なかったが、 厳密に言うとミスしているよ。と言うことなのでしょうか?
raccy

2017/01/08 01:28 編集

Webのページを表示するURLとJSONを取得するURLは、サイトが同じ、つまり、パス以外は同じでしょうか?"http://何たら/"というところが同じでアクセスしているかどうかです。 "Failed to load resource: Preflight response is not successful"のエラーが出る原因として、違うサイトから取得している場合があります。Chromeなどは、セキュリティ強化のため、デフォルトの状態では、違うサイトから取得した情報は信頼できない(脆弱性のきっかけになる)として、読み込みを拒否します。これを許可するにはCORSという仕組みでWebサーバーから信頼できる場所をHTTPヘッダで知らせる必要があります。ただし、ローカルファイルはさらに制限がかかっているため、たとえ同じローカルファイル同士であっても、起動時にセキュリティを外さないとできないようです。 これ以上は、サーバの構成や詳しいエラーログ内容を表示して貰うか、こちらで確認できるような情報を提示してもらわないとわからないです。まずは、エラーを確認し、それを「何も省略せずに」ご提示ください。
tototo6

2017/01/12 10:38

ご返答遅くなり大変申し訳ございません。 その後、作業の確認をローカルファイルで直で見てテストをしていたのを、 ローカルサーバーを立ち上げて確認したところ、 chromeもsafariもjsonを無事読み込んでくれ、正常に表示がされました。 お伝えをいただいておりました読み込みを許可しないブラウザがchromeのみだと 思っておりましたので混乱をしてしまっていました。 ご返信が滞っておりましたが真摯にお答えいただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問