2016-08-05 46 views
1

我有一個簡單的HTML頁面,我不確定哪個是放置PHP塊的最佳位置,它從文件加載2個JSON數組,然後可以傳遞給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代碼放在頁面的任何位置,因此您的解決方案與放在其他任何地方一樣有意義。沒有約定php代碼的地方,像你這樣的約定應該把你的JS代碼放在<head>中,但是如果你想要一個代碼,我會說在JavaScript變量旁插入它,因爲它使得代碼更容易理解。

在這個例子中,我不會在這種情況下使用單獨的變量,因爲它只是混淆了事情,並減慢了代碼的速度。 (當然,除非你想使用變量不止一次。)

我的代碼改成這樣:

<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> 

另外,我想補充一點,這是不必要的使用PHP在這種情況下,因爲JavaScript可以比PHP更快地解析JSON文件,並且不混合這兩種類型的代碼更有意義。我寧願只將這些變量放在JSON文件(var twit_collection = ...)中,並儘可能將其包含在我的html中。看看這個article這裏,49個upvoted的答案(第二個答案)幾乎可以澄清我的觀點。

關於該答案的評論:我甚至沒有注意到,但他使用了一個字符串並將其解析爲JSON對象。這是正確的,但JavaScript的接受JSON對象本身,如:

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

因此,爲了使這個問題的答案完全正確,前後JSON對象後,只要省略撇號和溝是JSON的解析。

+0

謝謝,這對我來說很有意義,但是,從JavaScript加載JSON通常是作爲AJAX調用完成的嗎?我想避免引入複雜的代碼,我也不想使用JQuery,添加另一個庫等。 – fartagaintuxedo

+1

對不起,我的意思是第二個答案(與49 upvotes)。這是解決這些問題的最簡單的解決方案,我只是想知道爲什麼它不是被接受的答案。 –

+0

哦,你說得對,那很棒 - 是的,這似乎是最好的選擇! – fartagaintuxedo

0

在您的javascript文件使用它之前傳遞變量可能是有意義的。一般來說,在大多數情況下,將JavaScript放在關閉</body>的上方儘可能早地向用戶展示儘可能多的網站是最佳實踐。然後,你的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,我建議你把它放在你的頭上你的字符集聲明後(如<meta charset="utf-8">

+0

@MarkusLaire - 我寫得正確,但有一個複製粘貼錯誤。固定 – MattDiMu

-3

PHP自動minifies您的JavaScript和HTML代碼,因此回顯整個頁面是最佳的用戶網頁加載時間,但它也是更多的工作在您的服務器上。但是,如果您的網頁已經縮小,那麼您的上面的腳本將是最佳的。

+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加載之後。

相關問題