使用 PHP 动态创建 Javascript 的更简单方法

Posted

技术标签:

【中文标题】使用 PHP 动态创建 Javascript 的更简单方法【英文标题】:Easier way to dynamically create Javascript using PHP 【发布时间】:2011-09-28 21:24:02 【问题描述】:

我目前正在使用 php 动态创建一个 javascript,它将在页面上为 echoed

示例代码:

$JS .= '<script>';

if($condition == true) 
    $JS .= 'alert("Yo its true omg!");


$JS .= "</script>";

如您所见,这最终会因为 ' 引号和双引号中单引号的转义而变得混乱......

有没有更好的方法来做到这一点?

【问题讨论】:

是的,更好的方法是不要这样做。 我这样做是因为我需要为从 mysql 数据库检索的 X 结果创建 X 块 JS 代码。每个结果都会创建自己的say div id,例如&lt;div id="marker_1"&gt;&lt;div id="marker_2"&gt; 等... 【参考方案1】:

你想要heredoc 语法!

if($condition)
    $statement = <<<JS
        alert("Wohoo!");
JS;
else $statement = "";

$javascript = <<<JS
    <script>
        $statement
    </script>
JS;

要处理 heredoc 字符串中的条件语句,只需预先执行条件逻辑,然后在 heredoc 字符串中插入空字符串或填充字符串。您可以像处理普通字符串一样将变量插入到heredoc字符串中。

如果您认为 heredoc 字符串很难定义,我同意您的看法。不幸的是,据我所知,这是避免更大的报价逃避麻烦的唯一方法(没有双关语)。

【讨论】:

Heredoc 要求开始标签后的第一行位于下一行的最左边 是否可以使用 PHP 的 if() 条件语句,或任何其他 PHP 代码? Alex:不,它没有。它所需要的只是结束标签单独在一行上,没有空格,并且开始标签在其行的最右边。 另请注意,如果要将值从 PHP 导出到 Javascript,则可能需要 json_encode() 或 addslashes()。【参考方案2】:
echo <<<EOF
 <script>
      alert("Yo it's true omg!");
 </script>

EOF;

【讨论】:

【参考方案3】:

创建一个 PHP 文件,但使用内容头使其在浏览器中“看起来”像一个 JS 文件。因为文件扩展名为 .php Apache(或您正在使用的任何其他 Web 服务器)仍会解析它,但浏览器会将其视为 JS 文件并正确运行内容。我经常将它用于 CSS 文件,因为它允许我声明变量并利用循环和其他更强大的 CSS 所缺乏的控制概念。

【讨论】:

【参考方案4】:

您最好还是将动态 javascript 文件创建为带有 PHP 扩展名的单独文件,然后在输出 javascript 之前将标头内容类型设置为 text/javascript

$js = <<<JS
// Your JS here
JS;

header("Content-type: text/javascript");
echo $js;
exit();

【讨论】:

【参考方案5】:

如果静态 javscript 代码量超过您动态创建的 javascript 代码量,您可以像往常一样简单地编写 javascript 代码,然后在需要的地方注入 php。

假设 index.php 的示例:

<?php

    $message = "Yo its true omg!";

?>

<html><head>

    <script>
        alert("<?php echo $message; ?>");
    </script>

</head><body>

    ...

</body></html>

【讨论】:

以上是关于使用 PHP 动态创建 Javascript 的更简单方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript 动态应用 CSS

如何使用 Javascript 访问动态表单元素 id

动态获取当前方法名称的更短方法[重复]

从javascript函数创建的表单提交FormData到php

php-fpm的更改组

如何使用canvasJS在PHP中制作动态图表?