可能重复:
Best way to transfer an array between PHP and Javascript
如何将PHP变量的值放在Javascript变量中? 这就是我现在在js文件中的内容:
test=<?php echo $country; ?>;
答案 0 :(得分:7)
在将变量传递给JavaScript之前,不要忘记正确转义变量。请使用json_encode()
,因为它以适合与JavaScript一起使用的方式转义和编码您的值:
test=<?php echo json_encode($country) ?>;
不要简单地发送未编码的变量,因为它可能会破坏事物,或者更糟糕的是,如果值来自不受信任的来源,则会危及您的安全。
另外,如果您希望能够在其中插入动态PHP代码,请将文件重命名为.php
而不是.js
。
答案 1 :(得分:4)
请记住,浏览器并不关心服务器端(PHP)代码是什么。它只关心呈现的代码(Javascript和HTML)的样子。所以你的PHP
test=<?php echo $country; ?>;
会出现这样的事情,假设$country
是一个字符串:
test=USA
这是有效的Javascript,但它没有将test
设置为值USA
。它将test
设置为变量USA
的值,几乎可以肯定undefined
。您需要使用引号来生成Javascript字符串文字:
test="<?php echo $country; ?>";
这将呈现为:
test="USA";
并且会做你期望的事。
我现在看到你提到该文件是一个js文件。我在上面假设它是一个标准的PHP-with-HTML文件。事实上,上述所有内容仍然有效。但是,将PHP脚本作为Javascript提供服务只是有点棘手。
首先,将文件命名为filename.php
(或您想要的任何其他名称)。到目前为止,这是让网络服务器知道用PHP解析它的最简单方法。然后使用以下说明让浏览器知道该文件是Javascript内容:
header('Content-Type', 'text/javascript');
在将任何内容发送到浏览器之前,将它放在文件的最顶部。然后,您可以根据需要包含PHP变量。
答案 2 :(得分:2)
将您的JS代码放在.php文件中并尝试这样:
<html>
<script language="JavaScript">
function echoSession(num)
{
window.document.newForm.mybox.value=num;
<?PHP echo $VAR ?>
}
</script>
</html>
关键是你的文件应该是一个PHP文件,使服务器将其解析为php。如果是.js文件则无法正常工作
答案 3 :(得分:2)
首先,为了确保你理解这一点,因为我看到许多初学者在服务器端脚本和客户端脚本之间的差异上磕磕绊绊,javascript是客户端脚本语言,而PHP是服务器端。如果你理解这一点,你基本上可以跳过这一段。当用户请求页面时,例如mysite.com/whatever.php,请求将被发送到服务器。因为用户请求PHP文件,所以服务器知道它应该在将文件发送给用户之前解析该文件。解析文件时,服务器启动n HTML模式,这意味着它读取的所有文本都直接发送给用户。从php遇到文件或文件结束的那一刻起。到达文件末尾时,它会将输出发送给用户。此输出可能包含HTML中的脚本标记。这些javascript的和平将在浏览器与HTML一起变为红色时执行。
但是,外部javascript文件不需要具有.js扩展名,就像css一样。因此,您还可以创建一个输出js的php文件,并将其作为之前建议的答案之一,以便将此js代码放在.php文件中:
var somevar = <?php echo $var; ?>;
如你所见,在javascript中等号后,将打印php变量$ var的值。因此,当浏览器输出为红色时,此值将分配给名为somevar的js变量。
答案 4 :(得分:1)
为了能够在Javascript文件中使用标记,您必须:
1)修改.htaccess文件以包含* .js作为要通过PHP引擎处理的文件的有效扩展名。 (Google左右)
2)将Javascript文件扩展名从* .js更改为* .php。
3)声明在PHP / HTML主文件中通过PHP设置的变量,而不是外部Javascript文件。
答案 5 :(得分:1)
有json_encode(http://php.net/manual/de/function.json-encode.php)方法来打印javascript的php变量。
test = <?php echo json_encode($value) ?>
即使$ value是一个数组也可以工作,但在你的情况下,如果它也是一个字符串。
答案 6 :(得分:1)
这是我在处理js vs php时经常遇到的问题。随着我的JS应用程序变得越来越复杂,越来越希望将所有JS保存在库文件中并尽可能保持我的php清洁。我开始使用的一个解决方案是执行以下操作:
js file:
myNamespace.bootstrap = function( payload ){
...
// internally boot up all the modules that need
// the data, passing it where relavent
module.load( payload );
}
php文件:
...
<script type="text/javascript">
myNamespace.bootstrap(<?= json_encode($payload_object); ?>);
</script>
</body>
这为您的所有脚本提供了一个数据注入点,在您的实际php中有一行js。应该允许您轻松管理javascript中的数据依赖项,因为您可以在php中命名它们。