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

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

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

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

jQuery

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

31725閲覧

JSON形式を所得したらundefinedとでる

takato

総合スコア148

JavaScript

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

jQuery

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2015/11/02 07:02

jsonデータを持ってくるのに成功したと思ったら「undefined」が大量に表示されました。

エラーも特にでていません。記載したjsファイルは以下です。

javascript

1<html> 2<title>ta 3</title> 4<script type="text/javascript" src="js/jquery-1.3.2.js"></script> 5<script type="text/javascript"> 6$.ajax({ 7 type: 'GET', 8 url: 'http://localhost:8180/api/doubutu/search?q=', 9 datatype: 'json', 10 success: function(json){ 11 $.each(json, function(i, item){ 12 $('body').prepend(item.codename + '<br>'); 13 }); 14 }, 15 error: function(){ 16 alert('error'); 17 } 18}); 19 </script> 20 21 22</html>

ご存知の方宜しくお願いします。

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

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

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

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

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

guest

回答3

0

$('body').prepend(item.codename + '<br>');

ここですが、json 形式なので配列になりますね
item[0] か item['codename'] になると思います。

投稿2015/11/02 07:16

trick

総合スコア366

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

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

takato

2015/11/02 07:45 編集

trick様 毎度ありがとうございます。 item[0]のほうで試したところ表示することができました!!ただ縦にアルファベットがずらっと並んでかなり見にくいです。。。 どのあたりを変更すれば直りますかね? テーブルのように表示したいのですが。。
trick

2015/11/02 07:55

item[0]で表示されましたか json データがどうなってるか分かりませんので何とも言えませんが data ( [ {"Id": 10004, "PageName": "club"}, {"Id": 10040, "PageName": "qaz"}, {"Id": 10059, "PageName": "jjjjjjj"} ] ) ; 上記データの場合であれば $.each(json, function(i, item){     $('body').prepend(item.PageName + '<br>'); }); これで表示できます。 テーブルのようにしたいのであれば for (i = 0; i < json.length; i++) { rows += "<tr>"; for (j = 0; j < json[i].length; j++) { rows += "<td>"; rows += json[i][j]; rows += "</td>"; } rows += "</tr>"; } //テーブルに作成したhtmlを追加する $("#tbl").append(rows); html部分 <table id="tbl" border="1"> </table> こんな感じですかね
takato

2015/11/02 09:18

trick様 JSONの形式そういえば記載していなかったですね。。。 { "id" : "51027617", "doubutu_id" : "4006464", "first_reg_daytime" : "2015-08-10T00:00:00.000+0000", "maker_cd" : "104", "kesyu_name" : ", "car_cd" : "10402008", "doubutu_name" : "neko", "inu_name" : "シャモニー", "model_year" : 2000, "model_num" : "07640", "model_name" : "PD6W", "regulation_class" : "GF", です。 提示していただいた書式をまねてみたのですがまた同じようにundefinedが出てしまいました・・・
trick

2015/11/02 10:57

これであれば、 ikki57さんも記載していますが i  item で表示されそうです。 $.each(json, function(i, item){ rows += "<tr>"; rows += "<td>"; rows += i; rows += "</td>"; rows += "<td>"; rows += item; rows += "</td>"; }); $("#tbl").append(rows); こんな感じでテーブル形式に表示できませんかね ためしていないので、間違っているかもしれませんが
takato

2015/11/04 05:27

trick様 参考にして下記のように編集しました。 <html> <title>ta </title> <script type="text/javascript" src="js/jquery-1.3.2.js"></script> <script type="text/javascript"> $.ajax({ type: 'GET', url: 'http://localhost:8180/api/stockcars/search?q=', datatype: 'json', success: function(json){ $.each(json, function(i, item){ rows += "<tr>"; rows += "<td>"; rows += i; rows += "</td>"; rows += "<td>"; rows += item; rows += "</td>"; }); $("#tbl").append(rows); }, error: function(){ alert('error'); } }); </script> </html> 記述を変えました。 rows += "<tr>"; rows is not definedというエラーが出ました・・ しかし行は定義していますよね? なんでこんなエラーが出るのか・・・
guest

0

ベストアンサー

すいません私のソースバグですね

html

1<html> 2<head> 3 <title>js sample</title> 4 <script type="text/javascript" src="jquery-1.9.0.min.js"></script> 5 <script type="text/javascript"> 6 7 //画面構築完了後 8 $(function() { 9 $("#btn_1").click(function(){ 10 $.ajax({ 11 type: 'GET', 12 url: 'http://aaa/sample.json', 13 dataType: 'jsonp', 14 jsonpCallback: 'data', 15 success: function(json){ 16 var rows = ""; 17 18 $.each(json, function(i, item){ 19 $('body').prepend(item.PageName + '<br>'); 20 21 $.each(item,function(key,value){ 22 rows += "<tr>"; 23 rows += "<td>"; 24 rows += key; 25 rows += "</td>"; 26 rows += "<td>"; 27 rows += value; 28 rows += "</td>"; 29 }); 30 31 }); 32 //テーブルに作成したhtmlを追加する 33 $("#tbl").append(rows); 34 } 35 }); 36 }); 37 }); 38 39 </script> 40</head> 41<body> 42 <table id="tbl" border="1"> 43 <tbody> 44 <tr> 45 <th>英語</th><th>日本語</th> 46 </tr> 47 </tbody> 48 </table> 49 <input id="btn_1" type="button" value="検索" /> 50</body> 51</html>

json

1data ( 2[ 3{ 4"id" : "51027617", 5"doubutu_id" : "4006464", 6"first_reg_daytime" : "2015-08-10T00:00:00.000+0000", 7"maker_cd" : "104", 8"kesyu_name" : "", 9"car_cd" : "10402008", 10"doubutu_name" : "neko", 11"inu_name" : "シャモニー", 12"model_year" : 2000, 13"model_num" : "07640", 14"model_name" : "PD6W", 15"regulation_class" : "GF"} 16] 17) 18;

上記の json 形式であれば、このソースで表示されました。
ポイントは、
1.$.each(json, function(i, item){ の中の $.each(item,function(key,value){です。
最初の each では、item の中に json のデータが全て入っているので
item をさらに each でプロパティを取得しています。

2.rows is not defined は rows を初期化していなかったからかもしれません。

投稿2015/11/04 05:52

trick

総合スコア366

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

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

takato

2015/11/04 06:58

trick様 ご親切にありがとうございました。 早速試させていただきました。 dataTypeがjsonpだと出来なかったのでjsonに変更したところJSONデータをテーブルにすることができました! 最後に一つだけ。。。 クリックすると確かにテーブルは表示されますが、テーブルの上に何個か undefined undefined... といくつも表示されます。 これはAPI側の問題で仕方ないことなんでしょうか?
trick

2015/11/04 08:22

ごめんなさい undefined がでるのは $('body').prepend(item.PageName + '<br>'); 多分これのせいです。消してください。
takato

2015/11/04 09:02

trick様 指示された点を修正したらundefined消えました! 貴重なお時間いただき感謝してます。 ありがとうございました!!! ベストアンサーにさせていただきます。
guest

0

返ってきているjsonの形式が意図したものと違うのではないでしょうか。

そのため、$.eachのループ処理にて、
item.codename というプロパティに値が無く、
undefinedが返されているのではないでしょうか。

js

1 success: function(json){ 2 $.each(json, function(i, item){ 3 console.log('json -> ', json) // jsonの形式を確認する 4 console.log('item.codename ->', item.codename) // ここがundefinedになっている 5 $('body').prepend(item.codename + '<br>'); 6 }); 7 },

恐らく、

$('body').prepend(item.codename + '<br>');

ではなく、

$('body').prepend(item[i] + '<br>');

こうあるべきかと思います。

json

1{ 2 property1: value1, 3 property2: value2, 4 property3: value3, 5 property4: value4, 6}

投稿2015/11/02 07:16

編集2015/11/02 07:20
ikki57

総合スコア290

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

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

trick

2015/11/02 07:27

そうですね item[i] ですね
takato

2015/11/02 07:39

ikki57様 初めまして。 試させていただいたところダイアログにエラーと表示されました。 どちらが正しいのでしょうか…?(@ω@)
ikki57

2015/11/02 08:58 編集

本当ですね、、、エラーが出ました。 確認したところ、item[index]だとundefinedでした。 ``` data = { p1: 'v1', p2: 'v2' } $.each(data, function(item, index){ console.log('item.codename ->', item.codename); console.log('item[index]->', item.index); }); ``` 結果↓ item.codename -> undefined item[index]-> undefined item.codename -> undefined item[index]-> undefined 下記が正かと思います。 ``` data = { p1: 'v1', p2: 'v2' } $.each(data, function(prop, value){ console.log('prop ->', prop); console.log('value ->', value); }); ``` 結果↓ prop -> p1 value -> v1 prop -> p2 value -> v2
takato

2015/11/04 05:19

ikki57さま <html> <title>ta </title> <script type="text/javascript" src="js/jquery-1.3.2.js"></script> <script type="text/javascript"> $.ajax({ type: 'GET', url: 'http://localhost:8180/api/stockcars/search?q=', datatype: 'json', success: function(json){ $.each(data, function(prop, value){ console.log('prop ->', prop); console.log('value ->', value); }); }, error: function(){ alert('error'); } }); </script> </html> と記述を変えましたが $.each(data, function(prop, value){ の行に「data is not defined」とエラーが出たのですが何か記述変えなくてはいけないところ等ございませんか?
ikki57

2015/11/04 09:44

返信遅くなりましてすみません。 解決済になったようですが、頂いた件、回答致しますと、 > $.each(data, function(prop, value){ > の行に「data is not defined」とエラーが出たのですが何か記述変えなくてはいけないところ等ございませんか? ここは、`data`ではなく、`json` が正ですね。 > success: function(json){ > $.each(data, function(prop, value){ ではなく、 > success: function(json){ > $.each(json, function(prop, value){ が正です。または、 > success: function(data){ > $.each(data, function(prop, value){ も同義です。 ajaxが成功(success)して、 > success: function(json){ の `json` に、成功した結果(データ)が返ってきます。 そして、それを ループ処理($.eaxh)するので、 > $.each(json, function(prop, value){ となります。 以上になります。 よろしくお願い致します。
takato

2015/11/04 10:14

ikki57様 解決済みにしたにも関わらず最後まで面倒を見ていただいてありがとうございます。 まだ未完成なのでその記述でも試してみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問