我有以下代码:
<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的说法,这里也提到了堆栈溢出,这是不可能的。
鉴于上述问题已经得到解答,是否有办法利用过去几年的知识来做到这一点?还有其他方法来提高可读性吗?
P.S.:我想值得一提的是,我从url、txt-文件和cookie中获得了php-变量。
发布于 2013-11-08 22:01:50
当我在一些情况下不得不将许多变量放入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()中加载即可。我还要指出,您可能想考虑一下是否要以这种方式传递cookie数据。Cookie数据无论如何都可以用于javascript,因此,如果需要更改值或类似的数据,您可能希望直接使用该数据。
发布于 2013-11-08 22:06:08
在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>干杯
发布于 2013-11-08 22:39:47
Mike的方法在这里很好(将所有内容都存储在一个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对待。
另外,如果您真的想要的话,也可以告诉您need服务器将js文件解析为PHP,这样它就可以查找<?php ... ?>段并执行它们,所以您甚至不需要在文件上有一个非js扩展名:
AddType application/x-httpd-php .js但是,在这样做时要小心,因为这意味着所有javascript文件(或者指定目录中的任何文件,如果您使用htaccess)都将被解析,如果您不小心,这可能会打开安全漏洞。
几个边注:
application/javascriptprinting或echoing时,首先使用小写(print vs Print),不要将打印出来的变量封装在括号中(print和echo是语言结构,因此它们不需要括号,在某些情况下使用它们可能会导致问题),最后,如果您在PHP中所做的一切是打印或回显,尝试使用PHP速记(大多数webserver默认理解它们):<?=$var_name;?>与<?php print($var_name);?>相同。https://stackoverflow.com/questions/19869082
复制相似问题