将变量传递给javascript时,php块在html页面中的最佳位置


Best place in html page for php block when passing variables to javascript

我有一个简单的HTML页面,我不确定哪个地方是放置PHP块的最佳位置,该块从文件中加载2个JSON数组,以便将它们传递给JavaScript变量。

我把它放在这里,但我没有标准:

<!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的好文章,但它没有涵盖这一点。

从纯粹的技术角度来看,我认为这无关紧要。您可以将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解析JSON文件的速度比PHP快得多,而且不混合这两种类型的代码更有意义。我宁愿在JSON文件(var twit_collection = ...(中创建这些变量,并尽可能地将其包含在我的html中。看看这篇文章,49票赞成的答案(第二个答案(基本上澄清了我的观点。

关于这个答案的评论:我甚至没有注意到,但他使用了一个字符串并将其解析为JSON对象。这是正确的,但JavaScript本机接受JSON对象,例如:

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

因此,为了使答案完全正确,只需省略JSON对象前后的撇号,并放弃JSON解析。

在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">(

之后把它放在脑子里

最好将逻辑从视图组件中分离出来。

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之前还是之后需要变量。

PHP会自动缩小您的javascript和html代码,因此,对于用户网页加载时间来说,回显整个页面是最佳的,但在服务器上也需要更多的工作。然而,如果你的网页已经缩小,那么你的上述脚本将是最佳的。