最佳实践:在JavaScript代码中包含PHP

时间:2011-02-01 17:25:02

标签: php javascript jquery

我是一个PHP phr34k,在寻求一些知识时沉迷于JavaScript。如果要在他们的脚本中包含php代码,那么最好的方法是什么?我提供了一些示例代码作为我将如何在脚本中包含PHP的示例。

这是一种有效的方法吗?

的index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP with JavaScript?</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="test.js.php"></script>
</head>
<body>
</body>
</html>

test.js.php

<?php 

$foo = 'bar';

?>

$(document).ready(function() {
    var foo = '<?php echo $foo; ?>';
    alert(foo);
});

再次感谢!

3 个答案:

答案 0 :(得分:5)

还在test.js.php中设置内容类型标题

header('Content-Type: text/javascript');

您还可以定义内联foo

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP with JavaScript?</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
    var foo = '<?php echo $foo;?>';
</script>
<script type="text/javascript" src="test.js"></script>
</head>
<body>
</body>
</html>

test.js

$(function(){
    alert(foo);
});

答案 1 :(得分:2)

我见过人们使用PHP解释器组合多个JS源文件,然后再将它们提供给客户端。这样,JS开发人员可以从拥有多个文件进行更有组织的开发中受益,但避免向客户端发送多个JS文件(因此多个HTTP请求)。

然而,现在有几个只针对JavaScript的构建脚本。例如,Sprockets允许您自动构建JavaScript文件。在此之前,我认为最好先实践“编译”JavaScript依赖项。例如,我编写了一个简单的Python脚本,它将在JS源代码中查找@include注释,并按顺序包含需要的顺序。可能比浪费服务器时间更好,以换取轻微的开发便利。

编辑:请特别注意将可变数据正确地转储到JavaScript中。例如,如果$foo是一个字符串,那么您需要确保它被双引号括起来。就像代码将要查找名为bar的JavaScript变量一样。

答案 2 :(得分:0)

除非你有非常奇怪的情况,否则你所描述的内容实际上是不可能的。 PHP在服务器上进行评估,而Javascript被发送到用户代理并由其Javascript引擎执行(在客户端)。

我知道没有用户代理包含PHP引擎,因此无法在客户端执行PHP。此外,除非你使用一些令人发指的逃脱,否则在将Javascript发送到客户端之前,PHP将由服务器执行。

在后面给出的示例中,PHP在服务器上进行评估,并向客户端发送一个看起来像完全的Javascript文件:

$(document).ready(function() {
    var foo = 'bar';
    alert(foo);
});

因此Javascript中不包含PHP;相反,你是通过PHP动态生成(正常)Javascript。

如果后者是你的意图,那么是的 - 这很好。 PHP引擎对Javascript一无所知,只生成一些恰好对JS解析客户端具有特定含义的文本。因此,Javascript的存在不会改变PHP端的任何,并且由于它已被处理掉,PHP的(先前)存在不会改变Javascript上的任何侧。

(如果你想让你的Javascript在客户端上执行一些PHP,那从根本上说是不可能的。)