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

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

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

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

JavaScript

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

Q&A

解決済

1回答

1413閲覧

JSONファイルローディング中に表示される「Now Loading」を非表示にしたい

pond

総合スコア350

JSON

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

JavaScript

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

0グッド

0クリップ

投稿2020/05/29 02:24

編集2020/05/29 05:55

前提・実現したいこと

jsonファイル ローディング中に表示される項目B(※1)の「Now Loading」の表示を非表示にしたい
項目A(※2)はjsonファイルのロードが完了すると非表示になる
Now Loadingの設定箇所はソースコード中にコメントを入れています

※1 ソースコード中のparent['20'] = "B"の箇所;
※2 ソースコード中のparent['10'] = "A"の箇所;

※ 画面イメージ
----------------------------
項目A
----------------------------
記事がロードされ、Now Loading
が非表示になる

----------------------------
項目B
----------------------------
記事がロードされた後も
「Now Loading」が表示されたまま

該当のソースコード

JavaScript

1<div class="example_area"> 2{foreach from=$dai item=item name=dai key=key} 3 <h3 class="heading" id="a{$key}">{$item}</h3> 4 <table id="parent{$daiid[$key]}"> 5 <tr><th>項目</th><th>質問</th><th>執筆日</th></tr> 6 </table> 7 // Now Loading画面表示  8 <div id="no_new_data" style="text-align: center; padding-top:4em;"><img alt="Loading..." src="/files/user/images/sp/common/icon-loader.gif"><div>Now Loading</div></div> 9{/foreach} 10</div> 11 12<script type="text/javascript"> 13{literal} 14var parent=[]; 15parent['10'] = "A"; 16parent['20'] = "B"; 17var child=[]; 18child['10010'] = "AAA"; 19child['10020'] = "BBB"; 20 21(function($){ 22 var json_data = ''; 23 var json_num = ''; 24 25 // json取得 26 $.ajax({ 27 type: 'GET', 28 url: '/example_tag_json2/?data_format=json', 29 dataType: 'json' 30 }) 31 32 .done(function(json) { 33     $("#json_loading").empty(""); 34 dspList(json); 35 }) 36 .fail(function( jqXHR, textStatus, errorThrown ) { 37 //alert('データ取得に失敗しました'); 38 //alert(textStatus); 39 //alert(errorThrown); 40 }) 41 .always(function(json) { 42 }); 43 44 function dspList(json) 45 { 46 var tmpId = ''; 47 var tmpChild = ''; 48 var tmpDate = ''; 49 var tmpStr = ''; 50 var item_others_exists = false; 51 52 for(var i=0; i < json.length; i++){ 53 // ループ内なので変数初期化 54 tmpId = ''; 55 tmpChild = ''; 56 tmpDate = ''; 57 tmpStr = ''; 58 59 // Loading画面を非表示にする 60 $("#no_new_data").html(""); 61 $("#no_new_data").css("padding-top", ""); 62 63 // 大項目に値が存在していたら該当する大項目に行を追加 64 if (json[i].ext_col_xxx) { 65 // idは「parent +(大項目キー)」 66 tmpId = "#parent" + json[i].ext_col_xxx; 67 // 小項目値セット 68 if (child[json[i].ext_col_xxx]) { 69 tmpChild = child[json[i].ext_col_xxx] 70 } 71 // 日付成形 72 tmpDate = json[i].ymd.replace(/-/g, '/'); 73 74 // <tr>文字列生成 75 tmpStr = "<tr>"; 76 tmpStr = tmpStr + "<td>" + tmpChild + "</td>"; 77 tmpStr = tmpStr + "<td><a href=\"/example/detail/id=" + json[i].example_id + '\" title=\"' + json[i].subject + '\">' + json[i].subject + "</a></td>"; 78 tmpStr = tmpStr + "<td>" + tmpDate + "</td>"; 79 tmpStr = tmpStr + "</tr>\n"; 80 // <table>に<tr>をappend 81 $(tmpId).append( 82 (tmpStr) 83 ); 84 // 「その他」だけ表示制御 85 if (json[i].ext_col_xxx == 'xxx') { 86 item_others_exists = true; 87 } 88 } else { 89 } 90 } 91 if (!item_others_exists) { 92 $("#parentxxx").css("display", 'none'); 93 $("#a9").css("display", 'none'); 94 } 95 } 96})(jQuery); 97{/literal} 98</script> 99 100{/if}

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

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

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

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

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

guest

回答1

0

ベストアンサー

#json_loadingの要素がありません。
また、foreachの中でid="no_new_data"を書いていますが、同一HTML内でidは重複できません。

投稿2020/05/29 02:32

kei344

総合スコア69606

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

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

pond

2020/05/29 05:39

ありがとうございます。 ご指摘の箇所を修正し、Loading画面のhtml、cssを空にする設定を.always(function(json) へ移動してみたのですが、項目A・B両方のLoading画面が消えなくなってしまいまして 指定方法が間違ってるんでしょうか?
pond

2020/05/29 05:39

ソースコード修正しております。
kei344

2020/05/29 05:49

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」してください。後から見た人から見て、現在の回答が「無いコードに対しての指摘」になり、意味がわからなくなります。
kei344

2020/05/29 05:53

何のフレームワークを使っているかはわかりませんが、$("#no_new_data{$daiid[$key]}") がどう変数展開されているかを確認してください。classを使わないでidに縛る理由もよくわかりません。
pond

2020/05/29 06:10

ご指摘ありがとうございます。 質問中のソースコードは元に戻しました、$("#no_new_data{$daiid[$key]}") の変数展開を確認いたします。 また修正した箇所を下記へ記載いたします。 修正箇所 ①  id修正 no_new_data{$daiid[$key]}へ変更 修正箇所 ②  Loading画面のhtml・cssを空にする設定を.always(function(json) {}へ移動
pond

2020/05/29 06:26

kei344さん、class指定しました。 下記のように変更したところうまくいきました。ありがとうございました。 ① Loading画面にclassを追加 <div id="no_new_data{$daiid[$key]}" class="no_new_data" style="text-align: center; padding-top:4em;"><img alt="Loading..." src="/files/user/images/sp/common/icon-loader.gif"><div>Now Loading</div></div> ② .always(function(json) {}でclass指定 .always(function(json) { $(".no_new_data").html(""); $(".no_new_data").css("padding-top", ""); });
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問