\r\n\t//外部javascript呼び出し\r\n\t//ここでid属性を記述して、スクリプトタグに変数を埋め込みます\r\n\r\n\r\n\r\n```\r\n```javascript\r\nvar $script = $('#script');\r\nvar result = JSON.parse($script.attr('data-param'));\r\n//確認\r\nconsole.log(result);\r\n```\r\n### 補足情報\r\n\r\nまずはPHPからjavascriptへ値を送るところまでをできるようにしたいのでjavascriptではコンソールに表示させています。","answerCount":3,"upvoteCount":0,"datePublished":"2018-10-31T17:06:40.177Z","dateModified":"2022-01-12T10:55:45.698Z","suggestedAnswer":[{"@type":"Answer","text":"PHPスクリプトをほんの少し修正すると動きましたよ\r\n\r\n```PHP\r\n を追加する *****************\r\n?>\r\n //外部javascript呼び出し\r\n //ここでid属性を記述して、スクリプトタグに変数を埋め込みます\r\n\r\n```\r\n\r\n現在使われている方法は、カスタムデータ属性というもので、様々なデータを送る際にも対応しているとても優れた方法です。ぜひこの方針を保ってください。\r\n\r\n失礼ながら他の方の回答ですと、数値ではなく文字列にすると動かなくなったり、クロスサイトスクリプティング脆弱性が入ったりして、汎用的ではありません。\r\n\r\n---\r\nkei344さんへのコメントを書いて思い出しましたが、jsonencodeの行を以下のように修正すると安全性が高まります。\r\n\r\n```\r\n\r\n```","dateModified":"2018-11-01T04:21:31.929Z","datePublished":"2018-11-01T02:25:26.662Z","upvoteCount":3,"url":"https://teratail.com/questions/155482#reply-233504","comment":[{"@type":"Comment","text":"すみません、私の回答で$aが未知の値が入っている場合クロスサイトスクリプティング脆弱性が入る可能性があるのかを、後学のために教えていただけませんか?","datePublished":"2018-11-01T02:39:54.790Z","dateModified":"2018-11-01T02:39:54.790Z"},{"@type":"Comment","text":"kei344さんの回答はXSS攻撃は受けないと思いますが、< や > はエスケープされないので、危なっかしい気はします。json_encodeの際に JSON_HEX_TAG 等を指定するべきかと思います。現状は / がエスケープされるので、かろうじて攻撃を受けない、という感じです。","datePublished":"2018-11-01T03:57:29.548Z","dateModified":"2018-11-01T03:57:29.548Z"},{"@type":"Comment","text":"返信ありがとうございます。ちなみに「'」はエスケープする必要はないのでしょうか。","datePublished":"2018-11-01T04:51:21.755Z","dateModified":"2018-11-01T04:51:21.755Z"}]},{"@type":"Answer","text":"> PHPからjavascriptへ値が送る\r\n\r\nこの考え方でそのまま学習を進めると今後別の場面でつまずきます。\r\n\r\nphpはサーバー側の言語でJavaScriptは基本的にクライアント側の言語です。\r\nphpはWebサーバー上でないと動きませんが、JavaScriptはそうでなくても動きます。\r\n \r\nphpは呼び出されたところに対して出力を行っているだけであり、それがhtmlなどでブラウザから参照しているからブラウザが解釈して表示してくれているだけです。\r\n\r\nというのを念頭に置くと、\r\n**phpでブラウザが解釈できる文字列を出力したものをJavaScriptの変数に格納するようなコードを書いて、その変数をJavaScriptで参照する**\r\nという考え方でコードを組むことになります。\r\n\r\nphpはechoやprintで出力を行いますが、それをブラウザに解釈させたいクライアント側の言語にするだけです。\r\n\r\n例\r\n```php\r\n\r\n\r\n```\r\n```php\r\n\r\n\r\n```\r\nもし外部jsファイルにセットしたければ、直に書くときと同じようにそのjsファイル読み込み記述より前にJavaScriptの変数を定義するように書き、その変数をjsファイルで使うだけです。\r\nつまりブラウザ「ソースを表示」で確認できる内容にしてください。","dateModified":"2018-10-31T23:16:31.717Z","datePublished":"2018-10-31T23:01:30.274Z","upvoteCount":2,"url":"https://teratail.com/questions/155482#reply-233447","comment":[{"@type":"Comment","text":"ご回答ありがとうございます。\r\n試してみたのですがが出力されてしまいました。","datePublished":"2018-11-01T01:38:13.223Z","dateModified":"2018-11-01T01:38:13.223Z"},{"@type":"Comment","text":"まさかjsファイルに直接書いてませんか?\r\nそれかphpではなくhtmlファイルに書いてるとか。","datePublished":"2018-11-01T01:40:45.541Z","dateModified":"2018-11-01T01:40:45.541Z"},{"@type":"Comment","text":"phpに記述しています。。","datePublished":"2018-11-01T01:54:38.674Z","dateModified":"2018-11-01T01:54:38.674Z"},{"@type":"Comment","text":"サーバー上で実行されていないようですね。それだと単にphpの実行環境が整っていません。\r\nひとまずローカルでWebサーバーを実行できる環境を用意してください。XAMPPを入れるのが早いです。\r\n今はhtmlを動かすクライアント感覚で動かそうとしています。\r\nもしXAMPP導入済みならXAMPPコントローラからApacheを起動してください。","datePublished":"2018-11-01T02:03:22.662Z","dateModified":"2018-11-01T02:03:22.662Z"}]},{"@type":"Answer","text":"これで出ませんか?\r\n```PHP\r\n\r\n\r\n```","dateModified":"2018-10-31T17:28:08.039Z","datePublished":"2018-10-31T17:28:08.039Z","upvoteCount":5,"url":"https://teratail.com/questions/155482#reply-233432","comment":[{"@type":"Comment","text":"ご回答ありがとうございます。\r\nvar a = JSON.parse( );\r\nのところでUncaught SyntaxError: Unexpected token <エラーが出てしまいました。","datePublished":"2018-11-01T01:40:29.113Z","dateModified":"2018-11-01T01:40:29.113Z"},{"@type":"Comment","text":"ブラウザにそのままドラッグアンドドロップするのではなく、PHPが解釈できるサーバで試してください。\r\n「PHP 開発環境」で検索するか、書籍等で調べられることをお勧めします。","datePublished":"2018-11-01T01:47:40.494Z","dateModified":"2018-11-01T01:47:40.494Z"},{"@type":"Comment","text":"ありがとうございます。","datePublished":"2018-11-01T01:58:43.877Z","dateModified":"2018-11-01T01:58:43.877Z"},{"@type":"Comment","text":"JSON.parseいらないんじゃないですか? あるいは シングルクォートで囲って文字列リテラルにするかしないと、型が合わないような気がします","datePublished":"2018-11-01T02:04:56.488Z","dateModified":"2018-11-01T02:04:56.488Z"},{"@type":"Comment","text":"To: ockeghemさん\r\nJSON.parse( 20 ) になるだけなので問題ないかと思います。","datePublished":"2018-11-01T02:11:58.760Z","dateModified":"2018-11-01T02:11:58.760Z"},{"@type":"Comment","text":"(文字列にしても問題ないと思うが・・・)","datePublished":"2018-11-01T02:28:25.812Z","dateModified":"2018-11-01T02:28:25.812Z"},{"@type":"Comment","text":"文字列は大丈夫ですね。せっかくJSONにしているので、配列等を渡すとどうでしょうか?…と思ったけど、文字列もダメですね。JSON.parse(\"abc\") などだと、abcという文字列をJSONとしてパースしようとしてエラーになりますね。JSON.parse('\"abc\"') なら大丈夫かと","datePublished":"2018-11-01T02:38:58.204Z","dateModified":"2018-11-01T02:44:28.588Z"},{"@type":"Comment","text":"To: ockeghemさん\r\nJSON処理を入れているのは質問者が入れているので使用しています。質問内容が「値を送りたい」なので特にJSONにこだわらずに回答しています。","datePublished":"2018-11-01T02:43:20.274Z","dateModified":"2018-11-01T02:43:20.274Z"},{"@type":"Comment","text":"いや、前のコメントを編集してしまいましたが、文字列もダメでした","datePublished":"2018-11-01T02:44:54.988Z","dateModified":"2018-11-01T02:44:54.988Z"},{"@type":"Comment","text":"To: ockeghemさん\r\n'use strict';で試したらエラーになりました、ご指摘感謝します。\r\nマイナス押して置いてください。","datePublished":"2018-11-01T02:57:06.112Z","dateModified":"2018-11-01T02:57:06.112Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/PHP","name":"PHPに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/155482","name":"PHPで取得した値をJavascriptへ送りたい"}}]}}}
###実現したいこと
PHPで取得した値をjavascriptに送り、送られてきた値をHTMLに表示したい。
自分はPHPを初めたばかりでPHPからjavascriptへ値が送るよい方法がわかりません。自分なりに調べてみて試してみたのですができませんでした。教えてほしいです。
該当のソースコード
PHP
1<?php
2$a = 20;
3
4$php_json = json_encode($a);//JSに送りたい値($a)
5
6 //JQuery読み込み
7<script src="jquery-3.3.1.js" type="text/javascript"></script>
8 //外部javascript呼び出し
9 //ここでid属性を記述して、スクリプトタグに変数を埋め込みます
10<script id="script" type="text/javascript" src="main.js"data-param='<?php echo json_encode($a);?>'></script>
11
12
javascript
1var $script = $('#script');
2var result = JSON.parse($script.attr('data-param'));
3//確認
4console.log(result);
補足情報
まずはPHPからjavascriptへ値を送るところまでをできるようにしたいのでjavascriptではコンソールに表示させています。
これで出ませんか?
PHP
1<?php
2$a = 20;
3 ?>
4<script>
5var a = JSON.parse( <?php echo json_encode( $a );?> );
6console.log( a );
7</script>
PHPスクリプトをほんの少し修正すると動きましたよ
PHP
1<?php
2$a = 20;
3
4$php_json = json_encode($a);//JSに送りたい値($a)
5
6 //JQuery読み込み ************* 以下に ?> を追加する *****************
7?><script src="jquery-3.3.1.js" type="text/javascript"></script>
8 //外部javascript呼び出し
9 //ここでid属性を記述して、スクリプトタグに変数を埋め込みます
10<script id="script" type="text/javascript" src="main.js"data-param='<?php echo json_encode($a);?>'></script>
現在使われている方法は、カスタムデータ属性というもので、様々なデータを送る際にも対応しているとても優れた方法です。ぜひこの方針を保ってください。
失礼ながら他の方の回答ですと、数値ではなく文字列にすると動かなくなったり、クロスサイトスクリプティング脆弱性が入ったりして、汎用的ではありません。
kei344さんへのコメントを書いて思い出しましたが、jsonencodeの行を以下のように修正すると安全性が高まります。
<script id="script" type="text/javascript" src="main.js"data-param='<?php echo json_encode($a, JSON_HEX_TAG | JSON_HEX_AMP);?>'></script>
PHPからjavascriptへ値が送る
この考え方でそのまま学習を進めると今後別の場面でつまずきます。
phpはサーバー側の言語でJavaScriptは基本的にクライアント側の言語です。
phpはWebサーバー上でないと動きませんが、JavaScriptはそうでなくても動きます。
phpは呼び出されたところに対して出力を行っているだけであり、それがhtmlなどでブラウザから参照しているからブラウザが解釈して表示してくれているだけです。
というのを念頭に置くと、
phpでブラウザが解釈できる文字列を出力したものをJavaScriptの変数に格納するようなコードを書いて、その変数をJavaScriptで参照する
という考え方でコードを組むことになります。
phpはechoやprintで出力を行いますが、それをブラウザに解釈させたいクライアント側の言語にするだけです。
例
php
1<?php
2$test = "a";
3?>
4<script>
5console.log("<?php echo $test ?>");
6</script>
php
1<?php
2$test = "a";
3?>
4<script>
5var test= "<?php echo $test ?>";
6console.log(test);
7</script>
もし外部jsファイルにセットしたければ、直に書くときと同じようにそのjsファイル読み込み記述より前にJavaScriptの変数を定義するように書き、その変数をjsファイルで使うだけです。
つまりブラウザ「ソースを表示」で確認できる内容にしてください。
15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

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

テンプレート機能で
簡単に質問をまとめる
質問する
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/01 01:40
2018/11/01 01:47
2018/11/01 01:58
2018/11/01 02:04
2018/11/01 02:11
2018/11/01 02:28
2018/11/01 02:44 編集
2018/11/01 02:43
2018/11/01 02:44
2018/11/01 02:57