我有以下代码:
<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 -->
使用externalJS.js:
var adjust = "<?php Print($adjust); ?>";
//More variable 'transports'
根据this question,此处也有关于stackoverflow的问题,这是不可能的。
有没有办法用过去几年的知识来做到这一点,因为上面的问题得到了回答? 还有其他方法可以提高可读性吗?
P.S。:我认为值得一提的是我从url,txt文件和cookie中获取了我的php变量。
答案 0 :(得分:5)
当我遇到需要将大量变量放入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_object
json_encode()
中加载要在JS中访问的任何内容
我还会评论您可能想要想一想是否要以这种方式传递cookie数据。无论如何,javascript都可以使用Cookie数据,因此如果您需要更改值等,可能需要直接使用该数据。
答案 1 :(得分:0)
在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>
干杯
答案 2 :(得分:0)
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 -->
然后你的externalJS.js.php文件看起来像:
<?php
header("content-type: text/javascript");
?>
var adjust = "<?php Print($adjust); ?>";
//More variable 'transports' and any other PHP/Javascript code
这里header
告诉浏览器尽管扩展名为.php,但仍将结果视为javascript。
另外,如果你真的想要,你也可以告诉你webserver将js
文件解析为PHP,这样它就可以查找<?php ... ?>
段并执行它们,所以你甚至都不会需要在文件上有一个非js扩展名:
AddType application/x-httpd-php .js
但是在执行此操作时要小心,因为这意味着将解析所有javascript文件(或指定目录中的任何文件,如果您使用htaccess
),这可能会打开安全漏洞不小心。
几个旁注:
text/javascript
vs application/javascript
print
或echo
时,首先使用小写(print
vs Print
),不要将打印变量包装在括号中( print
和echo
是语言结构,因此它们不需要括号,并且在某些情况下使用它们会导致问题),最后,如果你在PHP标签中所做的只是打印或回声,尝试使用PHP echo简写(大多数网络服务器默认理解它们):<?=$var_name;?>
与<?php print($var_name);?>
相同