>我有以下代码:
<HTML>
<?php
if(isset($_GET['adjust'])){
$adjust = true;
}
//More variabele declaring
?>
<HEAD>
<script type="text/javascript">
var adjust = "<?php Print($adjust); ?>";
//More variable 'transports'
</script>
</HEAD>
<!-- rest of the file -->
我想稍微清理一下,因为我有很多变量。这会影响文件的可读性和概览。
我想过把它们全部放到一个外部的JavaScript文件中,但它似乎不起作用。
<HTML>
<?php
if(isset($_GET['adjust'])){
$adjust = true;
}
//More variabele declaring
?>
<HEAD>
<script type="text/javascript" src="externalJS.js"></script>
</HEAD>
<!-- rest of the file -->
使用外部JS.js:
var adjust = "<?php Print($adjust); ?>";
//More variable 'transports'
根据这个问题,这里也在stackoverflow上问过,这是不可能的。
既然回答了上述问题,有没有办法用过去几年的知识来做到这一点?还有其他选择来提高可读性吗?
PS:我认为值得一提的是,我从url,txt文件和cookie中获得了php变量。
当我遇到不得不将许多变量放入javascript的情况时,我使用了将所有这些项目加载到对象(或数组)中并将该数据输出到javascript中的对象/数组文字中的方法。
例如:
<?php
$js_object = new stdClass();
$js_object->foo = 'some value';
$js_object->bar = 'some other value';
?>
<script type="text/javacript">;
var php_values = <?php echo json_encode($js_object); ?>;
console.log(php_values.foo);
console.log(php_values.bar);
</script>
这做了几件事。
- 如果传递的变量需要更改,则 JS 输出部分根本不需要更改。 你想在JS中访问的任何内容只需要在
$js_object
中加载,然后通过json_encode()
将对象输出到浏览器 - 它将所有PHP提供的值放在javascript中一个整洁的对象/数组中,在那里可以访问它们。
- 您可以通过这种方式轻松传递复杂的数据结构(嵌套数组、包含数组的对象、对象数组等)
- 如果需要,您可以在javascript中扩展对象以提供方法等来操作数据。
我还要评论一下,您可能需要考虑一下是否要以这种方式传递 cookie 数据。 无论如何,Cookie 数据都可用于 javascript,因此如果您需要更改值等,您可能希望直接使用该数据。
Mike Brant的方法在这里很好(将所有内容存储在json
对象中),但是要以更细分的方式具体完成您在这里要求的内容,您可以简单地将包含的javascript库设置为输出Javascript标头的PHP文件。您的标记将如下所示:
<HTML>
<?php
if(isset($_GET['adjust'])){
$adjust = true;
}
//More variabele declaring
?>
<HEAD>
<script type="text/javascript" src="externalJS.js.php?<?=http_build_query($_GET);?>"></script>
</HEAD>
<!-- rest of the file -->
然后你的外部JS.js.php文件将如下所示:
<?php
header("content-type: text/javascript");
?>
var adjust = "<?php Print($adjust); ?>";
//More variable 'transports' and any other PHP/Javascript code
这里的header
告诉浏览器将结果视为javascript,尽管扩展名.php。
另外,如果你真的想,你也可以告诉你 web 服务器将js
文件解析为 PHP,这样它就会寻找<?php ... ?>
段并执行它们,这样你甚至不需要在文件上有一个非 js 扩展名:
AddType application/x-httpd-php .js
但是当你这样做时要小心,因为这意味着所有javascript文件(或指定目录中的任何文件,如果你使用htaccess
)将被解析,如果你不小心,这可能会打开安全漏洞。
几个旁注:
- 看看围绕
text/javascript
与application/javascript
的讨论 - 不要将所有标签名称大写。是的,HTML5说没问题,但W3C建议将小写作为约定(无论是标准化还是任何可能的xhtml转换)。
- 当只是
print
ing或echo
ing时,首先使用小写(print
vsPrint
),不要将打印的变量括在括号中(print
和echo
是语言结构,所以它们不需要括号,并且在某些情况下使用它们可能会导致问题),最后,如果您在PHP标签中所做的只是打印或回显, 尝试使用 PHP echo 速记(大多数 Web 服务器默认理解它们):<?=$var_name;?>
与<?php print($var_name);?>
相同
在 PHP 中创建一个数组,其中包含变量名(在 javascript 中根据需要)作为每个元素的键,并在 javascript 中根据需要的值作为每个元素的值。然后,按照这个操作:
$myVars = array();
$myVars['adjust'] = isset($_POST['adjust']) ? true : false;
$myVars['other'] = isset($_POST['other']) ? true : false;
$myVars['another'] = isset($_POST['another']) ? true : false;
<script type="text/javascript">
<?php
foreach( $myVars as $k => $v ):
echo 'var ' . $k . '="' . $v . '";';
?>
</script>
干杯