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

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

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

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

JSON

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

JavaScript

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

jQuery

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

6511閲覧

C3.jsを使い、ajaxで返ってきた値でグラフを描きたい

mizutama72

総合スコア31

D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

JSON

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

JavaScript

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

jQuery

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2016/05/09 02:56

編集2016/05/09 03:54

以下のようにC3.jsを使い、ajaxで返ってきた値で散布図グラフを描こうとしています。

javascript

1$.ajax({ 2 type: "POST", 3 url: url, 4 data: {"column":column,"type":type,"lbl":lbl}, 5 dataType:'json', 6 success: function(data) 7 { 8 var ajax_data = data; 9 var test = ajax_data[1]+":'"+ajax_data[1]+"_x'"; 10 var chart = c3.generate({ 11 bindto: '#chart_scatter', 12 data: { 13 xs: { 14 test 15 }, 16 columns: [ 17 JSON.parse(ajax_data[2]), 18 JSON.parse(ajax_data[3]), 19 ], 20 type: 'scatter' 21 }, 22 axis: { 23 x: { 24 tick: { 25 fit: false 26 } 27 }, 28 } 29 }); 30 }

上記を実行すると、
Error: x is not defined for id = "eigo_x".
とエラーとなります。

ですが、変数testをconsole.logを使い、firefoxのfirebugで表示すると、
eigo:'eigo_x'
となっており、これをこのまま変数testの部分に貼り付けると、正常に動きます。

どうやったら、正常に動作するようになるのでしょうか?
javascriptに詳しい方、C3.jsに詳しい方、助けてください!

受け取ったdataの内容は以下の通りです。

0:"gendai"
1:"eigo"
2:"["eigo_x","78.3","78.3",...","28.1","27.4","24.7"]"
3:"["eigo","71.6","68.9","6...","31.2","29.8","28.5"]"
4:"["column0","column1","co...4","column5","column6"]"
type:"line_group_24"

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

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

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

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

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

kei344

2016/05/09 03:41

取得したJSONを質問文に追記いただいたほうが回答を得られやすいと思います。
guest

回答2

0

C3.js は詳しくないので generate の引数はちょっとわかりませんが、jQuery.ajax で dataType: 'json' を指定した場合、success: function(data)data はパースされたJSONが入っています。
そのため、JSON.parse は不要です。

JavaScript

1var ajax_data = data; 2var chart = c3.generate({ 3 bindto: '#chart_scatter', 4 data: { 5 x: ajax_data[1] + '_x', 6 columns: [ 7 ajax_data[ 2 ], 8 ajax_data[ 3 ] 9 ], 10 type: 'scatter' 11 }, 12 axis: { 13 x: { 14 tick: { 15 fit: false 16 } 17 }, 18 } 19});

投稿2016/05/09 04:44

kei344

総合スコア69400

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

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

0

ベストアンサー

jsは,hashの宣言と同時にkeyに変数を使うことはできません。
変数を使いたい場合は一度空初期化して,[]でkey指定してください。
また,hashの宣言時にkey,valueを文字列で渡して初期化することはできません。
なので

javascript

1var test ={}; 2 test[ajax_data[1]]=ajax_data[1]+"_x"; 34xs:test 56 7とするか 8 9var test = "{\""+ajax_data[1]+"\":\""+ajax_data[1]+"_x\"}"; 1011xs:JSON.parse(test) 1213

としたら治ると思います。前者が簡単なので,おすすめです。
ちなみにJSON.parseは厳密に使用を守らないとエラーになるので気を付けてください。

投稿2016/05/09 03:34

編集2016/05/09 03:39
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mizutama72

2016/05/09 04:03

tkowさま ご回答ありがとうございます! 教えて頂いた二つの方法でやったのですが、やはり同じエラーとなります。 JSON.parseの方は、xsの中に書くと [SyntaxError: missing : after property id]エラーになるので、 var test = "{\""+ajax_data[1]+"\":\""+ajax_data[1]+"_x\"}"; test = JSON.parse(test); とやってみましたが、 Error: x is not defined for id = "eigo_x". と同じエラーとなります。 こうなると、C3.js側の問題でしょうか・・・?
退会済みユーザー

退会済みユーザー

2016/05/09 04:23 編集

ですね。 http://stackoverflow.com/questions/30338691/c3-js-line-chart-getting-error-for-date これによると,data { x:"eigo_x", をつけ足せばいけるんじゃないかと。 ただ文字列コピペすると実行できるとのことで,指定しなかったらデフォルト値で設定できるのではないかという疑問がちょっとありますね。 本当に細かい文法ミスとかだと思うので,console.logやブレイクポイントなどを使って,フォーマット通りのデータ形式になっているかどうか確認してみてください。
mizutama72

2016/05/23 01:46

tkowさま ご連絡が遅れまして申し訳ありません。 結果として、 var test ={}; test[ajax_data[1]]=ajax_data[1]+"_x"; 略 xs:test の方式でできるようになりました! できなかったのは、 xs:{ test } と{があったためのようでした。。 助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問