2012-07-24 66 views
-1

我有一个PHP和Javascript变量通信的问题。我有这样的代码:PHP变量为javascript,不起作用

<?php 
$php_var = 'lol'; 
?> 

<html> 
<script type="text/javascript" charset="utf-8"> 
var php_var = "<?php echo $php_var; ?>"; 

alert(php_var); 

</script> 
</html> 

由于某种原因,此代码无效(按预期)。我无法将PHP变量的值传递给Javascript变量。出于某种原因,Javascript完全忽略了php标签并为php_var赋值“”。所以它提醒我把它作为文字的PHP代码。

我在做什么错?我一直被困在这个问题上3个小时。这是我的服务器的问题吗? (使用虚拟主机,专用)。谢谢

+2

就这样我们确定,你用'.php'扩展名命名文件正确吗? – JaredMcAteer 2012-07-24 19:04:07

+0

这是一个.html文件 – Kalon 2012-07-24 19:05:28

+0

我能做些什么来解决这个问题?使用AJAX? – Kalon 2012-07-24 19:06:32

回答

3

使用json_encode()以确保您得到一个有效的JavaScript表达式(否则字符,如换行符和引号将打破东西):

var php_var = <?php echo json_encode($php_var); ?>; 

你还需要确保PHP实际上是对文件中启用。这通常通过给文件.php扩展来实现。

+0

如果您不需要JSON会怎么样? – nico 2012-07-24 19:06:33

+2

他需要一个JavaScript字符串。提供字符串时,'json_encode'将给他一个有效的JavaScript字符串。 – ThiefMaster 2012-07-24 19:06:55

+0

具有讽刺意味的是,当喂一个字符串时它不会给出有效的JSON :) – Quentin 2012-07-24 19:16:04

1

使用.php文件扩展名,这将工作。

如果没有,那么你的变量将不会有值,你可以通过使用类似萤火虫的东西看到确切的问题。

+0

不,它不会,PHP不会在字符串内执行。 – nico 2012-07-24 19:07:58

+4

@nico - PHP中没有任何字符串......除非你的意思是JavaScript字符串(在这种情况下你错了,PHP不会因为模板中有引号字符而拒绝进入代码模式)。 – Quentin 2012-07-24 19:11:24

+0

@Quentin:我不好,你说得对 – nico 2012-07-24 19:14:39

1

你说你的代码所在的文件有一个.html扩展名,它应该是.php来呈现php代码。

+0

当然这不一定是真的。这取决于Web服务器配置。 – nico 2012-07-24 19:15:57

0

好了,你可以重命名文件,.PHP,它应该工作,或者你可以做以下的事情: 创建一个.htaccess文件, 添加如下代码 - >

RewriteEngine On 
<FilesMatch "(file.html)"> 
    SetHandler php5-script 
</FilesMatch> 

保存文件, 然后在HTML文件中添加以下PHP线在beggining - > 比你可以编写PHP代码选择HTML文件中

或者,您可以添加以下规则

RewriteEngine On 
file.html file.php