如何提高可读性?(将 PHP var 传递给外部文件中的 JavaScript)


How to improve readability? (pass php vars to javascript in external file)

>我有以下代码:

<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>

这做了几件事。

  1. 如果传递的变量需要更改,则 JS 输出部分根本不需要更改。 你想在JS中访问的任何内容只需要在$js_object中加载,然后通过json_encode()将对象输出到浏览器
  2. 它将所有PHP提供的值放在javascript中一个整洁的对象/数组中,在那里可以访问它们。
  3. 您可以通过这种方式轻松传递复杂的数据结构(嵌套数组、包含数组的对象、对象数组等)
  4. 如果需要,您可以在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)将被解析,如果你不小心,这可能会打开安全漏洞。


几个旁注:

  1. 看看围绕text/javascriptapplication/javascript的讨论
  2. 不要将所有标签名称大写。是的,HTML5说没问题,但W3C建议将小写作为约定(无论是标准化还是任何可能的xhtml转换)。
  3. 当只是print ing或echo ing时,首先使用小写(print vs Print),不要将打印的变量括在括号中(printecho是语言结构,所以它们不需要括号,并且在某些情况下使用它们可能会导致问题),最后,如果您在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>

干杯