我有一个简单的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代码,因此,对于用户网页加载时间来说,回显整个页面是最佳的,但在服务器上也需要更多的工作。然而,如果你的网页已经缩小,那么你的上述脚本将是最佳的。