2016-08-05 3 views
1

私は単純なHTMLページを持っていますが、2つのJSON配列をファイルからロードできるPHPブロックJavaScript変数に渡されます。javascriptに変数を渡すときのPHPブロックのhtmlページでの最適な場所

私はここでそれを配置しているが、私は何の基準を持っていない:

<!DOCTYPE html> 

//i have placed the block here 
<?php 
    $twit_collection=file_get_contents('cdtwbot_twit_collection.json'); 
    $tag_collection=file_get_contents('cdtwbot_tag_collection.json'); 
?> 

<html> 
    <head> 
     <script type="text/javascript"> 
      //pass PHP variables declared above to JavaScript variables 
      var twit_collection = <?php echo $twit_collection; ?>; 
      var tag_collection = <?php echo $tag_collection; ?>; 
     </script> 
    </head> 

    <body> 
     //document continues... 
    </body> 
</html> 

はそれがより良い<head>タグの内側に配置されますか?それとも別の場所?

PHPからJavaScript hereに変数を渡すことに関する素晴らしい記事がありますが、この点については説明していません。

答えて

2

純粋に技術的な観点からは、私は問題ではないと言いたいと思います。 phpコードをページのどこにでも置くことができるので、他の場所に置くのと同じくらい意味があります。 JSコードを<head>に置くようなコンベンションは、phpコードを置くことはできませんが、コードを理解しやすくするために、JavaScript変数の隣に挿入するといいでしょう。

この例では、問題を混乱させ、コードの速度を遅くするため、この例では別の変数を使用しません。 (もちろん、あなたがかつてよりも多くの変数を使用したい、場合を除きます。)

私はこれにコードを変更したい:私はこれはPHPを使用して不必要であることを追加したい

<script type="text/javascript"> 
    var twit_collection = 
      <?php echo file_get_contents('cdtwbot_twit_collection.json'); ?>; 
    var tag_collection = 
      <?php echo file_get_contents('cdtwbot_tag_collection.json'); ?>; 
</script> 

また、この場合、はJSONファイルをPHPよりもはるかに高速に解析できるため、これら2つのタイプのコードを混在させない方がはるかに意味があります。むしろ、JSONファイル(var twit_collection = ...)でこれらの変数を作成して、可能な限りHTMLに組み込みたいと思います。ここでarticleを見て、49 upvoted答え(2番目の答え)はかなり私のポイントを明確にします。

その回答に対するコメントについて:気づいていませんでしたが、文字列を使用してJSONオブジェクトに解析しました。だからJSONオブジェクトの前後にアポストロフィを省略し、そのJSON-解析を捨て、その答えは完全に右にするために

var twit_collection = {array: [{key: value1}, {key: value2}, {key: value3}] }; 

:このように、それは正しいですが、JavaScriptがネイティブJSONオブジェクトを受け取ります。

+0

ありがとう、これは私にとって理にかなっていますが、JSONをJavaScriptから読み込むのは、通常AJAXの呼び出しとして行われますか?私は複雑なコードを導入することを避けたい、私はまた別のライブラリなどを追加するJQueryを使用したくない。 – fartagaintuxedo

+1

申し訳ありません私は2番目の答え(49 upvotes)を意味して申し訳ありません。それはそのような問題のための最も簡単な解決策です、私はちょうどそれが受け入れられた答えではないと思っています。 –

+0

ああ、あなたは正しい、それは素晴らしい - はい、行くのが最善の方法だと思われる! – fartagaintuxedo

0

javascriptファイルの直前に変数を渡すのはおそらく意味があります。一般的には、ほとんどの場合、可能な限り早い段階でユーザーにウェブサイトの多くを示す閉じるの上にJavaScriptを置くことがベストプラクティスと見なされます。次に、あなたのHTMLは次のようになります。

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 

    </head> 

    <body> 
    <?php 
     $twit_collection=file_get_contents('cdtwbot_twit_collection.json'); 
     $tag_collection=file_get_contents('cdtwbot_tag_collection.json'); 
    ?> 
     <script type="text/javascript"> 
      //pass PHP variables declared above to JavaScript variables 
      var twit_collection = <?php echo $twit_collection; ?>; 
      var tag_collection = <?php echo $tag_collection; ?>; 
     </script> 
    <script src="path/to/your/js/file.js"></script> 



    </body> 
</html> 

あなたが早くあなたのjavascriptが必要な場合は、私はあなたのcharset宣言(例えば<meta charset="utf-8">)の後に、あなたの頭の中でそれを置くためにあなたをお勧めします

+0

@ MarkusLaire - 正しく書きましたが、コピー貼り付けエラーがありました。固定 – MattDiMu

-3

PHPが自動的にJavaScriptをminifiesしたがって、ページ全体をエコー表示するHTMLコードは、ユーザーのWebページの読み込み時間に最適ですが、サーバー上ではさらに機能します。しかし、あなたのウェブページがすでに縮小されている場合は、上記のスクリプトが最適になります。

+1

PHPにはこのような自動化された縮小はありません。 –

+0

それは最新のPHPバージョンで私にとってはうまくいきます。 PHPからjavascriptをエコーし​​てみましたか? – David

+0

'echo'は物事を正確にそのまま出力する必要があるので、自動的に細分化するのは間違いでしょう。したがって、これはテストする必要はありません。 –

0

ビューコンポーネントからロジックを分離することをお勧めします。

controller.php

<?php 
    $twit_collection=file_get_contents('cdtwbot_twit_collection.json'); 
    $tag_collection=file_get_contents('cdtwbot_tag_collection.json'); 
    include('view.php'); 

view.php

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="text/javascript"> 
      //pass PHP variables declared above to JavaScript variables 
      var twit_collection = <?php echo $twit_collection; ?>; 
      var tag_collection = <?php echo $tag_collection; ?>; 
     </script> 
    </head> 

    <body> 
     //document continues... 
    </body> 
</html> 

限りはJavaScriptが行くべき場所として、あなたが変数の前またはDOMがロードされた後に必要があるかどうかに依存します。

関連する問題