JavaScriptのコード内でPHPで設定した定数などを使用したいです。
試しにJavaScriptコード中に、<?php echo PATH; ?>
というようにHTML内に書くときと同じように記述をしたら動作したのですが、こういった記述は問題ないのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答6件
0
ベストアンサー
問題ないのでしょうか?
全く問題ないです。ただ、Javascriptのファイルにはできればjavascriptしか書きたくない(PHP(できればHTMLも)とJavascriptはファイルを分けて保存し保守性を高めるのが一般的)というのはありますので方法を一つ提案します。
私は一旦HTMLに埋め込んでjavascriptで取り出して使っています。
下記サンプルは私が書きやすいのでjQueryを使っていますが・・・
例えば
(1)PHPの変数$list1
の要素数が3以上だった場合、jsでポップアップで「3以上」と表示し、10以上だった場合は同様に「10以上」と表示するコードを考えてみると、こんな感じになります。
(2)また、$list2
のような連想配列もjson形式にエンコードすることで埋め込むことができます。
php
1<?php 2// (1) 3$list1 = [ 4 'a', 'b', 'c', 'd','e' 5]; 6 7// (2) 8$list2 = [ 9 'hoge' => [ 10 'foo' => 'bar', 11 ], 12]; 13?> 14 15// ~~~html書き始める~~~ 16<input type="hidden" id="list1" value="<?php echo count($list1) ?>"> 17<input type="hidden" id="list2" data-list="<?php echo json_encode($list2) ?>">
javascript
1$(function() { 2 // (1) 3 var count = $("#list1").val(); 4 if (count >= 10) { 5 alert("10以上"); 6 } else if (count >= 3) { 7 alert("3以上"); 8 } 9 10 // (2) 11 var array = $("#list2").data("list"); 12 alert(array.hoge.foo); // barと表示される 13});
同じようにすれば、質問者様の仰られているPATH
を埋め込んでjsで読み込んで処理を行うことがコードは少々長くはなりますがよりキレイなコードで実現できます。(もっと良い方法もあるかもしれませんが私はこの程度しか思いつきません。)
data属性に関してはこちらがこちらが参考になります。
投稿2016/10/25 04:53
編集2016/10/26 01:37総合スコア606
0
JavaScriptコード自体をPHPで生成することはあまりないですが、変数宣言だけPHP出力をはめ込む、というのはちょくちょく行います。
json_encode
を使えば、そのままJavaScriptの変数宣言のところに書けて便利です。
投稿2016/10/25 04:43
総合スコア146674
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
PHPが出力するHTML内にJavaScriptコードが直接記述されているのであれば別に問題はありません。
ただ、JavaScriptを別ファイル化しないとSEO的に不利になる気がします。
また、JavaScriptはクライアントサイドで動作する為、その値がクライアント側の動作で書き換えられる可能性がある事を意識して書く必要はあります。
が、動作はしますね。
投稿2016/10/25 04:33
総合スコア5405
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/25 05:25

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/26 02:39