使用php echo定义javascript var

时间:2014-12-16 21:29:20

标签: javascript php

我已经看过几个对此问题的回复了 - 所以我确定有人会很快将此标记为副本,但我还没有看到这个特定问题的答案。任何其他线程。

我有两个测试文件: a.php和a.js

在a.php中,我定义了

$q = $_GET['q'];

工作正常。

然后我调用一个单独的a.js文件,其中我有:

var partNumber = " <?php echo $q; ?>" ;

这不起作用,因为partNumber实际上是 <?php echo $q;?>

在我关于这个主题的几篇帖子中,我已经看到以下两个作为最受欢迎的答案:

var partNumber = " <?php echo $q; ?>" ; //with quotes

var partNumber =  <?php echo $q; ?> ;  //without quotes

然而,这些都不适合我。没有引号导致我的代码不执行,(我假设因为javascript需要无错误才能成功执行,这会导致错误),而带引号的那个只输出我输入的内容。

这两者之间有什么区别,我在这里做错了什么?

4 个答案:

答案 0 :(得分:4)

为了使用

var partNumber = " <?php echo $q; ?>";

在您的JS文件中,服务器必须配置为处理具有js扩展名的文件作为可执行PHP文件。不太可能这是你的情况。因此,您无法在javascript文件中解析PHP变量。

然而,您提到的已接受的答案,将<script>标记嵌入到HTML文件中,这些文件通常由PHP解释程序处理(如果它们具有.php扩展名)。

答案 1 :(得分:2)

正确的方法:

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

其他任何事情都是“坏事”。如果您不输出CORRECT javascript代码,则会引入语法错误,并且您的整个<script>块将被终止。总是使用json_encode(),你将输出语法正确的JS数据。

答案 2 :(得分:1)

问题1

您的变量未被写入的原因仅仅是因为您的javascript位于单独的文件中,如您所说:

  

然后我调用一个单独的a.js文件

您无法在单独的.js文件中读取PHP变量。

将变量从PHP传递到javascript的正确方法是将javascript内联(在同一文档中),然后像这样调用它:

简写(需要在php.ini中设置short_open_tags):

var partNumber = "<?= json_encode($q); ?>" ;

或者大多数人会做的事情:

var partNumber = "<?php echo json_encode($q); ?>" ;

您应该使用json_encode的原因是确保无论$q中的内容是什么,它都不会破坏javascript,因为json_encode将始终输出有效的javascript。< / em>的

问题2

要回答你的第二个问题,两个代码块之间的区别在于一个代码将被写成:

var partNumber = "1";

另一个将写:

var partNumber = 1;

这取决于您是希望将partNumber读取为整数还是字符串...

答案 3 :(得分:1)

如果来自a.php的html包含a.js:

a.php只会

<html><head>
<script type="application/json" id="myvars"><?=json_encode(["partNumber"=>$_GET["q"]]);?></script>
<script type="text/javascript" src="//code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="/a.js"></script>
</head>
...

a.js

jQuery(function($){ 
    var myvars = $.parseJSON($("#myvars").html()), 
        partNumber = myvars.partNumber;
    alert(partNumber);
});

如果不是,你应该研究AJAX。

编辑:对于示例可能有点过于复杂......但如果验证GET q参数,它与Content Security Policy兼容。