我已经看过几个对此问题的回复了 - 所以我确定有人会很快将此标记为副本,但我还没有看到这个特定问题的答案。任何其他线程。
我有两个测试文件: 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需要无错误才能成功执行,这会导致错误),而带引号的那个只输出我输入的内容。
这两者之间有什么区别,我在这里做错了什么?
答案 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)
您的变量未被写入的原因仅仅是因为您的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>的
要回答你的第二个问题,两个代码块之间的区别在于一个代码将被写成:
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兼容。