\r\n\r\n```\r\n```javascript\r\npage.open(url, function(status) {\r\n});\r\n\r\n```\r\n↑のパターンでは、そもそもphpファイル内、「」にてundefinedのエラーが発生しています。\r\n\r\n###パターン②\r\n```php\r\n';\r\npage.open(url, function(status) {\r\n})\r\n```\r\n↑のパターン②ではエラーは出ませんがurlをopenすることができていません。\r\n\r\n##追記①\r\nphpファイル\r\n```\r\n\r\n\r\n```\r\njsファイル\r\n```\r\nconsole.log('Hello, world!');\r\nvar page = require('webpage').create();\r\nvar fs = require('fs');\r\nvar url = \"\";console.log(url);\r\npage.open(url, function(status) {\r\n if (status === 'success') {\r\n page.switchToFrame(0);\r\n // HTML を書き出し\r\n var html = page.evaluate(function() {\r\n return document.getElementsByClassName('contents')[0].innerHTML;\r\n });\r\n fs.write('resources\\kaigokensaku.blade.php', html, 'w');\r\n }\r\n\t// exit しないと終了しない\r\n\tphantom.exit();\r\n});\r\n\r\n```\r\n上記のjsファイルで「console.log(url);」をかけて出力を確認したところ、\r\n\r\n「string() \"\"」\r\n\r\nが出力されました。\r\n\r\n##追記②\r\njsにphpの変数を渡せなかったのは、私のコードが下記のようになっていたからでした。\r\n```php\r\n\r\n```\r\nそこで下記のように変更を加えてみました。\r\n```php\r\n$project = 'aaaaa';\r\n?>\r\n\r\nってどこのことでしょうか?おそらくecho $projectの間違いかと思いますので、そのつもりで回答を書きます。\r\n\r\n1. jsファイル読み込みとスクリプト直書きの順番を逆にしてみてください。このままではjump.jsに書かれた処理が先行してしまい、urlは未定義な状態でjump.jsの処理が実行されます。しかし、先にurlへの代入をしてしまえば、グローバル変数への代入となるため、jump.jsの中でも使用できます。\r\n2. urlへの代入時に、の部分がそのまま埋め込まれてしまうため、文字列として認識されません。phpタグをダブルクォーテーションで囲んでください。あとセミコロンも書いたほうがいいです。\r\n3. よく見たら$projectを定義しているphpタグの?とphpがくっついていないです。空白を削除しましょう。\r\n\r\n```JavaScript\r\n\r\n\r\n\r\n```","dateModified":"2017-11-27T09:31:44.882Z","datePublished":"2017-11-27T09:11:24.020Z","upvoteCount":2,"url":"https://teratail.com/questions/102237#reply-157400","comment":[{"@type":"Comment","text":"ご回答ありがとうございます\r\n上記の方法で試みましたが、「$project」を定義しているのはjsファイルとは別のphpファイルでありますので、$projectがundefinedと出てしまいました。\r\n(jump.jsファイルを参照するよう指示しているのもphpファイル内になります","datePublished":"2017-11-27T09:30:13.179Z","dateModified":"2017-11-27T09:30:13.179Z"},{"@type":"Comment","text":"3の指摘を追加しました。これで試してみてください。","datePublished":"2017-11-27T09:32:00.866Z","dateModified":"2017-11-27T09:32:00.866Z"},{"@type":"Comment","text":"ありがとうございます\r\nただ、結果は同様でした。","datePublished":"2017-11-27T09:42:31.427Z","dateModified":"2017-11-27T09:42:31.427Z"}]},{"@type":"Answer","text":"Laravelタグがついているので、Laravelであれば\r\nPHPからPHPを離れたJavascript実行時に変数を伝えるライブラリのPHP-Vars-To-Js-Transformerや\r\n[laracasts/PHP-Vars-To-Js-Transformer](https://github.com/laracasts/PHP-Vars-To-Js-Transformer)\r\nBlade内であれば、@json()ディレクティブを使うと受け渡しプログラムが行いやすいです。\r\n[Laravel 5.5 Bladeテンプレート](https://readouble.com/laravel/5.5/ja/blade.html)\r\n素のPHPの話であれば、テンプレートエンジンに適切に変数を渡せていなかったり、変数のスコープが届いていないのかと思います。","dateModified":"2017-11-27T08:55:35.195Z","datePublished":"2017-11-27T08:55:35.195Z","upvoteCount":2,"url":"https://teratail.com/questions/102237#reply-157393","comment":[{"@type":"Comment","text":"ご回答ありがとうございます\r\nPHP-Vars-To-Js-Transformerを使おうと思います。\r\nただ、readmeを読んでもわからなかったのですが、導入するだけで使えるものでしょうか?","datePublished":"2017-11-27T10:53:19.355Z","dateModified":"2017-11-27T10:53:19.355Z"},{"@type":"Comment","text":"必ずviewファイルを経由しなければならないように書いてあったので質問させていただきました。","datePublished":"2017-11-27T11:33:07.456Z","dateModified":"2017-11-27T11:33:07.456Z"},{"@type":"Comment","text":"PHP-Vars-To-Js-Transformerはビューファイルの時点で処理の解決を図ると思うので、Viewを利用する必要があるかと思います。","datePublished":"2017-11-27T12:22:07.645Z","dateModified":"2017-11-27T12:22:07.645Z"},{"@type":"Comment","text":"となりますと、素のPHPで解決したいですね・・・\r\n可能な限りphpとjavascript間で解決したいのですが、何が原因で変数を渡せていないと考えられるのでしょうか・・・","datePublished":"2017-11-27T12:26:03.831Z","dateModified":"2017-11-27T12:26:03.831Z"},{"@type":"Comment","text":"見た感じは直前で変数を代入していて、PHPでのUndefineエラーにはならないかと思いますが、Javascript側でエラーであればパターン②の変数のデータを''でくくるので出力すればPHPは役目を終えていると思うので、\r\n出力された実際のJavascriptデータが正しいかを確認してみてください","datePublished":"2017-11-27T12:37:34.377Z","dateModified":"2017-11-27T12:37:34.377Z"},{"@type":"Comment","text":"追記①にjavascriptにて出力を確認したものを載せました。\r\nurlに入れたものがそのままに出力されていました。","datePublished":"2017-11-27T13:37:20.981Z","dateModified":"2017-11-27T13:37:20.981Z"},{"@type":"Comment","text":"Javascrptファイルにphpタグがそのまま残るというのは当たり前ですが.php拡張子とその実行環境でPHP解析処理が走らないとPHPタグは解析されません。\r\nパターン1で動かないのは、質問のコードのままとすれば開始タグの< ?phpの< と ?phpの間に不要な空白があるから単なる文字列になっていることが濃厚です。以下に直してみてください。\r\n```\r\n\r\n```\r\nこのような記述エラーへの対処法は、適切なIDEを使うと波線などのエラー警告をしてくれるので活用してみてください。","datePublished":"2017-11-27T14:21:47.075Z","dateModified":"2017-11-27T14:23:08.915Z"},{"@type":"Comment","text":"< と ?phpとの間の隙間については修正いたしました\r\nただ、同じphpファイル内に書いた
質問するログイン新規登録

Q&A

解決済

3回答

16401閲覧

【laravel】javascriptファイルにPHPの変数を渡す方法 ※特殊ケースです

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

JavaScript

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

2クリップ

投稿2017/11/27 08:48

編集2017/11/28 09:47

0

2

###わからないこと
いつもお世話になっております。
この度、phpファイルからjavascriptファイルへの変数を渡すことができず、対処に困っております。
ご助力いただけないでしょうか。

以下のパターンを試みましたが、うまくいっておりません

###パターン①

php

1<? php 2$project = 'aaaa' 3?> 4<script type="text/javascript" src="{{asset("jump.js")}}"></script> 5<script> 6url = <?php echo $project;?> 7</script>

javascript

1page.open(url, function(status) { 2}); 3

↑のパターンでは、そもそもphpファイル内、「<?php echo $project;?>」にてundefinedのエラーが発生しています。

###パターン②

php

1<? php 2$project = 'aaaa' 3

javascript

1var url='<?php echo $project; ?>'; 2page.open(url, function(status) { 3})

↑のパターン②ではエラーは出ませんがurlをopenすることができていません。

##追記①
phpファイル

<?php $project = 'aaaa'; ?> <script type="text/javascript" src="jump.php"></script>

jsファイル

console.log('Hello, world!'); var page = require('webpage').create(); var fs = require('fs'); var url = "<?php echo $project; ?>";console.log(url); page.open(url, function(status) { if (status === 'success') { page.switchToFrame(0); // HTML を書き出し var html = page.evaluate(function() { return document.getElementsByClassName('contents')[0].innerHTML; }); fs.write('resources\kaigokensaku.blade.php', html, 'w'); } // exit しないと終了しない phantom.exit(); });

上記のjsファイルで「console.log(url);」をかけて出力を確認したところ、

「string() "<?php echo $project; ?>"」

が出力されました。

##追記②
jsにphpの変数を渡せなかったのは、私のコードが下記のようになっていたからでした。

php

1<?php 2$project = 'aaaa'; 3 4 $uu = exec('C:\X_DRIVE\asp\home\laravel\vendor\bin\phantomjs.exe C:\X_DRIVE\asp\home\laravel\public\js\jump.js');dd($uu); 5 // 取得したhtmlをkaigokensaku.blade.phpに出力・取得 6 $file = 'C:\X_DRIVE\asp\home\laravel\resources\kaigokensaku.blade.php'; 7 $fileContent = file_get_contents($file); 8 $fileContent = str_replace('&', '&amp;', $fileContent); 9 10 11 $xml = simplexml_load_string($tidy); 12?>

そこで下記のように変更を加えてみました。

php

1$project = 'aaaaa'; 2?> 3<script> 4var url = <?php echo $project;?>; 5</script> 6<?php 7exec('C:\X_DRIVE\asp\home\laravel\vendor\bin\phantomjs.exe C:\X_DRIVE\asp\home\laravel\public\js\jump.js');

しかし、このようにした結果、今度はjump.jsファイルにて処理がうまく走らなくなりました。

javascript

1var page = require('webpage').create(); 2var fs = require('fs'); 3page.open(url, function(status) { 4 if (status === 'success') { 5 page.switchToFrame(0); 6 // HTML を書き出し 7 var html = page.evaluate(function() { 8 return document.getElementsByClassName('contents')[0].innerHTML; 9 }); 10 fs.write('resources\kaigokensaku.blade.php', html, 'w'); 11 } 12 // exit しないと終了しない 13 phantom.exit(); 14}); 15

上記のjsファイルにてurlを参照し、そのページのhtmlをローカルのblade.phpファイルに出力する構造になっています。

ご助力いただけないでしょうか。

何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

<?php echo $projectListUrl;?>ってどこのことでしょうか?おそらくecho $projectの間違いかと思いますので、そのつもりで回答を書きます。
  1. jsファイル読み込みとスクリプト直書きの順番を逆にしてみてください。このままではjump.jsに書かれた処理が先行してしまい、urlは未定義な状態でjump.jsの処理が実行されます。しかし、先にurlへの代入をしてしまえば、グローバル変数への代入となるため、jump.jsの中でも使用できます。
  2. urlへの代入時に、<?php ?>の部分がそのまま埋め込まれてしまうため、文字列として認識されません。phpタグをダブルクォーテーションで囲んでください。あとセミコロンも書いたほうがいいです。
  3. よく見たら$projectを定義しているphpタグの?とphpがくっついていないです。空白を削除しましょう。

JavaScript

1<?php 2$project = 'aaaa' 3?> 4<script> 5url = "<?php echo $project;?>"; 6</script> 7<script type="text/javascript" src="{{asset("jump.js")}}"></script>

投稿2017/11/27 09:11

編集2017/11/27 09:31
masaya_ohashi

総合スコア9210

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

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

退会済みユーザー

退会済みユーザー

2017/11/27 09:30

ご回答ありがとうございます 上記の方法で試みましたが、「$project」を定義しているのはjsファイルとは別のphpファイルでありますので、$projectがundefinedと出てしまいました。 (jump.jsファイルを参照するよう指示しているのもphpファイル内になります
masaya_ohashi

2017/11/27 09:32

3の指摘を追加しました。これで試してみてください。
退会済みユーザー

退会済みユーザー

2017/11/27 09:42

ありがとうございます ただ、結果は同様でした。
guest

0

Laravelタグがついているので、Laravelであれば
PHPからPHPを離れたJavascript実行時に変数を伝えるライブラリのPHP-Vars-To-Js-Transformerや
laracasts/PHP-Vars-To-Js-Transformer
Blade内であれば、@json()ディレクティブを使うと受け渡しプログラムが行いやすいです。
Laravel 5.5 Bladeテンプレート
素のPHPの話であれば、テンプレートエンジンに適切に変数を渡せていなかったり、変数のスコープが届いていないのかと思います。

投稿2017/11/27 08:55

aro10

総合スコア4106

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

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

退会済みユーザー

退会済みユーザー

2017/11/27 10:53

ご回答ありがとうございます PHP-Vars-To-Js-Transformerを使おうと思います。 ただ、readmeを読んでもわからなかったのですが、導入するだけで使えるものでしょうか?
退会済みユーザー

退会済みユーザー

2017/11/27 11:33

必ずviewファイルを経由しなければならないように書いてあったので質問させていただきました。
aro10

2017/11/27 12:22

PHP-Vars-To-Js-Transformerはビューファイルの時点で処理の解決を図ると思うので、Viewを利用する必要があるかと思います。
退会済みユーザー

退会済みユーザー

2017/11/27 12:26

となりますと、素のPHPで解決したいですね・・・ 可能な限りphpとjavascript間で解決したいのですが、何が原因で変数を渡せていないと考えられるのでしょうか・・・
aro10

2017/11/27 12:37

見た感じは直前で変数を代入していて、PHPでのUndefineエラーにはならないかと思いますが、Javascript側でエラーであればパターン②の変数のデータを''でくくるので出力すればPHPは役目を終えていると思うので、 出力された実際のJavascriptデータが正しいかを確認してみてください
退会済みユーザー

退会済みユーザー

2017/11/27 13:37

追記①にjavascriptにて出力を確認したものを載せました。 urlに入れたものがそのままに出力されていました。
aro10

2017/11/27 14:23 編集

Javascrptファイルにphpタグがそのまま残るというのは当たり前ですが.php拡張子とその実行環境でPHP解析処理が走らないとPHPタグは解析されません。 パターン1で動かないのは、質問のコードのままとすれば開始タグの< ?phpの< と ?phpの間に不要な空白があるから単なる文字列になっていることが濃厚です。以下に直してみてください。 ``` <?php $project = 'aaaa' ?> ``` このような記述エラーへの対処法は、適切なIDEを使うと波線などのエラー警告をしてくれるので活用してみてください。
退会済みユーザー

退会済みユーザー

2017/11/28 00:19

< と ?phpとの間の隙間については修正いたしました ただ、同じphpファイル内に書いた<script>箇所にある$projectはundefinedとなってしまいました。 情報の後出しになり申し訳ございませんが、上記のphpファイルがコマンドをたたいて処理を走らせるものである場合、解析がなされないということはないですよね?
退会済みユーザー

退会済みユーザー

2017/11/28 09:22

失礼いたしました。 私のコードが少々煩雑なものだったことが原因でした。 一応jsファイルに変数を参照させることはできたのですが、その結果弊害が生じてしまいました。 追記②に記載させていただきました。
guest

0

ベストアンサー

自己解決しました。
解決方法はjsにphpの変数を渡すものではないため、タイトルを一部変更し、
追記③に解決方法を記載いたします。

ご協力してくださった方々、ありがとうございました。

投稿2017/11/28 12:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問