使用 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,例如<div id="marker_1">
、<div id="marker_2">
等...
【参考方案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 的更简单方法的主要内容,如果未能解决你的问题,请参考以下文章