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

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

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

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

JavaScript

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

Q&A

解決済

3回答

2728閲覧

phpファイルからjsファイルにデータを渡したい

n-hiroki

総合スコア15

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2018/06/08 03:01

もともと一つのファイルでphpもJavaScriptも書いていました。
その状態ではうまく動いたのですが、JavaScriptを別の.jsファイルに移したいです。
ですがうまくPHPのデータを.jsファイルに渡せません。

php

1<?php 2 $data = file($filename); 3?> 4 5<html> 6 <input type="hidden" id="data" style="display:none;" value="<?php echo json_encode($data); ?>"> 7</html> 8<script type="text/javascript" src="js/main.js"></script>

javascript

1var data = document.getElementById('data').value; 2console.log(data);

JavaScriptとPHPでは実行順序的にJavaScriptを実行してからPHPが実行されると思うのですがそれが原因でしょうか?

いろいろ思いつくことは試したのですが、みんなうまくいかなかったです。
ご教授願いいたします。

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

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

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

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

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

guest

回答3

0

実行順序的にJavaScriptを実行してからPHPが実行される

いえ。実行されるのはサーバーサイドの言語であるPHPが先です。
あくまでPHPによって出力されたHTMLが先か、何も待たずに実行されるJavaScriptが先か の問題です。

単にドキュメントの読み込みが終わってないタイミングでJavaScriptが実行されてしまうからでは。
yambejpさんのようにLoad後のイベントで取得するとか、いっそhiddenを使わず直接書いても良いのではと。

html

1<script> 2var json_data = "<?php echo json_encode($data); ?>"; 3</script> 4<script type="text/javascript" src="js/main.js"></script>

main.js

console.log(json_data);

※いずれにしてもJavaScriptの実行はLoad後にするようにしたほうが良いです。

投稿2018/06/08 03:54

m.ts10806

総合スコア80850

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

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

n-hiroki

2018/06/08 04:02

mts10806さん 回答ありがとうございます! 実行順序を勘違いしていました。 ご指摘ありがとうございます! それと、JavaScriptの実行はLoad後にするように気をつけます!
guest

0

ベストアンサー

特に問題があるようには見えませんが、たとえば

PHP

1<?php 2 $data = file($filename); 3?> 4<html> 5<head> 6<script type="text/javascript" src="js/main.js"></script> 7</head> 8<body> 9<input type="hidden" id="data" style="display:none;" value="<?php echo json_encode($data); ?>"> 10</body> 11</html>

としておいて、jsを

  • main.js

javascript

1window.addEventListener('DOMContentLoaded', function(e){ 2 var data = document.getElementById('data').value; 3 console.log(data); 4});

のようにしてみてはどうでしょうか?

投稿2018/06/08 03:36

yambejp

総合スコア114839

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

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

n-hiroki

2018/06/08 03:59

yambejpさん 回答ありがとうございます! 早速試してみます!
guest

0

JavaScriptの実行をLoad後にしてもうまくいかなかったのですが、解決したので記入いたします。
yambejpさんが教えてくれたように変更したところ、なぜか一文字しか取得できませんでした。
もともと何も出力されていなかったので大きな進歩です!!(実際は1000文字以上あります。)
それでいろいろ調べたところ、どうもPHPのデータ型がおかしい。
string型かと思っていたのですがarray型で$data[0]に全ての値が入っていました。
なので、string型にキャストすることで対応しました。

ですが、これでもまだうまくいきませんでした。
inputタグのvalueにjson_encode(変数)をechoするのがいけなかったようです。
なので以下のように修正したら正常に動きました。

php

1<?php 2 $data = file($failname); 3 if($data == false){ 4 //エラーチェック 5 } 6 //型がおかしいのでキャストします。 7 $data = (string)$data[0]; 8?> 9<!DOCTYPE html> 10<html lang="jp"> 11<head> 12 <meta charset="UTF-8"> 13 <script type="text/javascript" src="js/main.js"></script> 14</head> 15<body> 16 <input type="hidden" id="data" style="display:none;" value="<?php echo htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); ?>"> 17</body> 18</html>

javascript

1window.addEventListener('DOMContentLoaded', function(e){ 2 var data = document.getElementById('data').value; 3 console.log(data); 4});

先ほどの発言を補足させていただきますと、回答していただいたお二人のアドバイスのおかげで解決することができました!
あくまでも僕のコードの書き方に問題があったのです。
お二人には感謝しています。
本当にありがとうございました!

投稿2018/06/09 07:11

n-hiroki

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問