質問: PHPでWebアプリを作っています。 トップページにフォームを置き、そこから次のページにPOSTでデータを渡し、 そのデータを元に処理をした結果をPlotly.jsというグラフライブラリに配列で渡して、グラフを表示させるというものです。 ところがこれが表示されません。 具体的にフォームのページをa.php 移動先のページをb.phpとします。 今、ただ跳ぶだけのページにしていますので、 a.phpのフォームは ``` ``` ヘッダのjQueryは ``` ``` のように宣言しています。 b.php単独ですと ヘッダ部に ``` ``` と宣言されており、 ``` ``` ``` ``` となっています。 b.phpを直にブラウザで表示させると普通に棒グラフまで表示されますが、 a.phpからジャンプすると値は行ってるみたいなのですが、グラフが表示されません。 chromeをつかってますので、F12で表示を見てみますと、 Uncaught ReferenceError: Plotly is not defined というエラーメッセージが出ます。 自分でも調べましたが、まずjQueryを読み込んでとか書かれていますが、 そのあたりをしてもそうなります。 ご存知の方、ご教授いただけないでしょうか? よろしくお願いします。 (補足1) ご指摘ありがとうございます。 はい、実際にはこのような感じでフックしておりまして、POST自体は実現できています。 a.php上でフォームの下にb.phpの出力が表示される感じです。 POST先でUncaught ReferenceError: Plotly is not definedとなるために、 ライブラリの問題かなと考えているのですが、すでに書いているために途方に暮れている次第です。 ``` ``` (補足2) 上記のjavascriptのコードの ``` .done(function(data, status, jqXHR){ $("#ajax_result").html(data); }) ``` の箇所で、なんらかの書式でPlotly.jsを呼び出して解釈してね的な 記載方法はあるのでしょうか? なんとなく、この箇所でデータを呼び出したけど、a.phpにはPlotly.jsが つかわれてないような気がするのですが。 と、実は続きを書いていたはずが操作の誤りか、消えてしまいました。 ``` .done(function(data, status, jqXHR){ $("#ajax_result").html(data); //連続して使えるようにするためボタン無効化解除 $button.attr('disabled', false); }) ``` このように$button.attr('disabled', false);としてやると グラフを呼び出したり、 ページ上で引き続きフォームを利用することができるようになりました。 しかし、新規でページ上で利用する際には、 結果の数値は出るのですが、グラフは出ません。 その状態でもう一度ボタンを押して初めて表示されます。 ただし、グラフが表示された状態でフォームのデータを変更して再びボタンを押すと グラフは問題なく利用できます。 新規でページを呼び出した際には必ず1回目は表示されず、 もう1回ボタンを押して初めて表示されるようになるという次第です。 こちらにつきまして、みなさまの知見をお聞かせいただけますと幸甚です。 よろしくお願いします。 (解決) kei344様のおっしゃる通り、a.phpに ``` ``` を~内に入れるとあっさりとできました。 その他ご助言いただきました皆様にも大変勉強になりました。 どうもありがとうございました。
回答: 外しているかも知れませんが、a.php から POST された際の b.php の(実行済みの)ページをブラウザでソース表示し、その内容をよく見てみると原因がわかるかも知れません。 つまり、PHPのコードがどこかで HTML か javascript のコードを破壊している可能性があるかも知れません。(PHPのエラーコードがjavascriptのソースの中に表示されてしまっているとか)