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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

3回答

6664閲覧

PHPからJavaScriptへ配列を渡す時にJSが動かなくなる

user_

総合スコア9

JSON

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

2クリップ

投稿2018/08/04 05:24

編集2018/08/05 22:58

前提・実現したいこと

PHPを用いてDBから抽出したデータをJSに引き渡したい。

発生している問題・エラーメッセージ

PHPでDBからカラムを配列で取得、その配列をjson化までは可能。
変換されていることも確認。
JSの配列に置き換える際にJSすべてが機能しなくなる。

var js_array = JSON.parse('<?php echo $php_json; ?>';

上記を入力する前は、記載されている別のJSが動いていたが
この一文を入れると全てが動かなくなります。

PHPとJSは同じファイル内に記載しています。

var_Dump($php_json);
結果: string(73) "["0","1","2","3","4","5","6","7","8","9","10","11","12","13","123","999"]"

該当のソースコード

PHP

1$res = $pdo->query ( 'select * from product' ); 2$data = $res->fetchAll(); 3$idDate = array_column($data,'id'); 4$php_json = json_encode($idDate);

JS

1var jsVar = <?php echo $php_json; ?>; 2var js_array = JSON.parse (jsvar); 3js_array.foreach(function(value){ 4 document.write(value); 5});

補足情報(FW/ツールのバージョンなど)

PHP Version 7.2.7

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

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

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

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

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

m.ts10806

2018/08/04 06:56

ブラウザ開発ツールコンソールのエラーを確認してください。またPHPで作成したJSON文字列の文法が正しいかも確認してください(構文チェックサービスがweb上にありますのでご活用ください)
user_

2018/08/04 07:03

コンソールでは、JS一行目が「var jsVar = <br />」の表示になり「Uncaught SyntaxError: Unexpected token <」のエラーメッセージが表示されます。
m.ts10806

2018/08/04 07:06

phpとjsは同じファイル内ではないのでしょうか。できればコード全体の流れが分かるものを提示していただきたく
m.ts10806

2018/08/04 07:08

あと$php_jsonをvar_dumpした結果を質問本文に追記してください。
guest

回答3

0

foreachではなく、forEachにすれば動きますね。

また、以下は冗長です。

JavaScript

1var js_array = JSON.parse('<?php echo $php_json; ?>');

JSONというものは元々JavaScriptの配列やオブジェクトのソースコード形式なので、それを文字列にしてからJSON.parseしているのは冗長です。
ということで、以下のようにすれば動くと思います。

JavaScript

1var js_array = <?php echo $php_json; ?>; 2js_array.forEach(function(value){ 3

投稿2018/08/04 07:28

ockeghem

総合スコア11701

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

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

user_

2018/08/04 07:44

回答ありがとうございます。 ご指摘の通り修正しましたが、結果変わらず同じでした。 コンソールで確認した際に、JS一行目が var jsVar = <br /> となってしまうのはなぜでしょう。
ockeghem

2018/08/04 08:45

var jsVar = で始まる行はソースコードとして提示いただいてないので、調べようがないです
user_

2018/08/05 22:59

ソース修正しました。
guest

0

var_Dump($php_json);
結果: string(73) "["0","1","2","3","4","5","6","7","8","9","10","11","12","13","123","999"]"

この結果と

コンソールでは、JS一行目が「var jsVar = <br />」の表示になり「Uncaught SyntaxError: Unexpected token <」のエラーメッセージが表示されます。

この結果が矛盾しています。
もし、本当にこうなるのなら、

PHP

1<?php 2$php_json = '["0","1","2","3","4","5","6","7","8","9","10","11","12","13","123","999"]'; 3echo $php_json; 4?>

HTML

1<br />

になるということです。
引いては、

PHP

1<?php 2echo '["0","1","2","3","4","5","6","7","8","9","10","11","12","13","123","999"]'; 3?>

HTML

1<br />

になるということです。

現状を再確認して下さい。
また、私がこの回答に書いたPHPコードだけで test.php を作成し、実行結果を確認して下さい。

※PHPの出力結果を見るのにブラウザのコンソールは必要ありません。HTMLソースを確認して下さい。

Re: user_ さん

投稿2018/08/06 04:37

編集2018/08/06 04:39
think49

総合スコア18162

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

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

user_

2018/08/06 05:03

var jsVar = <?php echo $php_json; ?>; で記載の部分がブラウザからHTMLソースを確認すると var jsVar = <br /> <b>Notice</b>: Undefined variable: php_json in <b>C:\パス\ファイル名.php</b> on line <b>251</b><br />; として表示されております。 また、書いて頂きました上記のPHPコードでtest.phpを作成して実行しましたら問題なく、 ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","123","999"]とブラウザ表示されました。 また、<script>タグ内部に書いてブラウザからソースを確認してみても問題なく ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","123","999"]が入っていました。 申し訳ないですが私には原因がわからない為ご教示頂きたいです。
think49

2018/08/07 10:46 編集

これは私の読み込みが甘かったですね。 エラーメッセージでWeb検索して下さい。 https://www.google.co.jp/search?q=php+Notice+Undefined+variable 状況的に、`var_dump($php_json)` を `echo $php_json;` の「直前」に実行していないですね? 実行していたなら、値が入っていない事がすぐに分かったはずです。
user_

2018/08/07 04:12

仰る通りですね。直前で実行すると値は入って来ていないです。 不明点として、1点あるのですが、 エラーがあるとJS自体全てが動かなくなるのでしょうか。 <?php echo $php_json; ?> を記載して上手く値が渡されていない事で現在エラーとなっておりますが、 他のJS(グラフ表示)も動かなくなってしまっています。
think49

2018/08/07 10:49

SyntaxErrorは致命的なエラーなので、エラーが発生した以降のコードは全て実行されません。
guest

0

var jsVar = <br />

javascript

1var jsVar = `<?php echo $php_json; ?>`;

とするとエラー情報が拾えるかもしれません

投稿2018/08/06 01:54

yambejp

総合スコア114814

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

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

user_

2018/08/06 02:25

var jsVar = <?php echo $php_json; ?>; はUncaught SyntaxError: Unexpected token < でしたが 上記では、Uncaught SyntaxError: Invalid hexadecimal escape sequenceになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問