- ベストアンサー
javascriptのPHP化について
- javascriptの外部ファイルをPHP化して、サーバサイドで動的に生成した内容を吐き出しています。
- 実行される順番は、(1)HTMLの読み込み開始、(2)header内のjavascript外部ファイルの読み込みと実行、(3)HTMLファイルのbody以下を読み込み、(4)結果をブラウザに返して表示という流れです。
- しかし、javascript外部ファイル内のPHPでセッションデータを扱っている場合、(3)のbody内でPHPでセッションを定義した内容が、なぜか(2)のjavascript外部ファイルで反映されて実行されることがあります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(1)HTMLの読み込み開始 → この時点でサーバサイドではPHPのプログラムが実行され、実行が終わった結果をHTMLとしてブラウザに返します。(PHPのプログラムは全ての処理が完了済です) (2)header内のjavascript外部ファイルの読み込みと実行 (3)HTMLファイルのbody以下を読み込み (4)結果をブラウザに返して表示 → HTMLを読み込みながらjavascript外部ファイルを読み込むことはありません。 javascript外部ファイル、画像等の組込オブジェクトは並列で読み込みが行われますが、ベースとなるHTMLは先に読み込みが完了しています。 (4)はブラウザに返しているのでは無く、ブラウザでレンダリングしていると言う事になります。 実際の流れとしては (1)ブラウザがサーバへページをリクエスト (2)サーバでPHPのプログラムを実行した結果をHTMLとして返す (3)ブラウザでHTMLの解析をする (4)外部ファイルをサーバへリクエストする(複数ファイルを並列でリクエスト) (5)ページのレンダリングを行う → (4)と並列に処理し、読み込み終えた分から順に表示(JavaScriptなら実行)する
その他の回答 (2)
- CyberCypher
- ベストアンサー率73% (39/53)
PHP化の意味が理解できません ・JavaScriptのコードを吐きだすPHPを生成 ・JavaScriptが行っている処理をPHPで行う のどちらかなのでしょうか? //javascript外部ファイル内のPHPでセッションデータを扱っている場合、 //(3)のbody内でPHPでセッションを定義した内容が、なぜか(2)のjavascript外部ファイルで反映されて実行されるのです。 これは当たり前の事だと思います。 ブラウザ ↓ サーバーへリクエスト ↓ サーバーがPHPを処理し、HTMLを生成 (PHPの処理は此処でFIX) ↓ サーバーからブラウザへデータの渡し ↓ HTML及びJavaScriptを読み込みブラウザが処理 ブラウザに到達した時点でPHPの値は確定されているのですから PHPでSESSION値からJavaScriptを生成しているのであれば PHPが先に処理されるのでSESSIONの値が反映されると思います。 (0)サーバーでPHPがHTMLを生成 (1)ブラウザでHTMLの読み込み開始 (2)header内のjavascript外部ファイルの読み込みと実行 (3)HTMLファイルのbody以下を読み込み (4)ブラウザが結果を描画 ブラウザに結果を返す意味が自分には理解できません。 AjaxでPHPファイルにアクセスしに行っているなど 特別な事が無いかぎりクライアント(ブラウザ)側で PHP処理を行っていると言うのは有り得ません (ブラウザ側でPHP処理と言うのも語弊がありますが…… 正確にはPHP処理はサーバーが行っているものなので)
お礼
ありがとうございます! おっしゃる通り、根本的な理解が間違えておりました。 PHPをHTMLやJavascriptのローカル側の処理と平行で行われていると考えていたのです。 おかげさまで理解できました!すっきりです。
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
んー? body内でphpってことは <body> <?php // phpの処理 ?> </body> ってなっているってこと? JavaScriptの実行順以前に、phpにアクセスして処理された結果がのHTMLが表示されるんだよ。 (1)HTMLの読み込み開始(この時点でPHPの処理が終わり、セッションの処理がされている) (2)外部JavaScriptをPHPで生成(1.でセッションが作られているから反映されている) >javascriptはHTMLが全部読み込まれてから実行されるのでしょうか? これは書き方次第。 onloadとかで実行するようにしてあれば読み込み完了後。
お礼
ありがとうございます! 根本的な考え方が間違っておりました。 PHPはサーバサイドなので、ローカル側の処理より先に処理が終わっているという概念ではなく、全てが平行で処理されていると考えておりました。 なので、後から処理されるはずのHTMLに記載したPHPの処理が優先されているのか理解できなかったのです。 おかげさまで理解できました!
お礼
ありがとうございます! 納得できました! PHPはサーバサイドで、リクエストに対し何より先に実行されているんですね。 だからHTMLのbody内で定義された変数でもjavascriptとして処理されているんですね。 これが分かるとセッションだけでなく通常の変数でも同じ事ができそうですね。