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

时间:2011-07-05 14:36:48

标签: php javascript jquery mysql html

我目前正在使用PHP在页面上动态创建一个echoed的javascript。

示例代码:

$JS .= '<script>';

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

$JS .= "</script>";

正如你所看到的,这最终会变得混乱'引号和双引号中单引号的转义......

有更好的方法吗?

6 个答案:

答案 0 :(得分:10)

您需要heredoc语法!

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

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

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

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

答案 1 :(得分:5)

你最好还是使用PHP扩展创建动态javascript文件作为单独的文件然后在输出javascript之前将标题内容类型设置为text / javascript

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

echo <<<EOF
 <script>
      alert("Yo it's true omg!");
 </script>

EOF;

答案 4 :(得分:0)

将您的javascript分成文件:

文件名:'javascript1.js'包含:

alert(1);

文件名:'javascript2.js'包含:

alert(2);

文件名:'javascript3.js'包含:

alert(3);

确保它们可以正确连接。

然后是php:

$final_output = file_get_contents('javascript1.js');

if ($condition) {
    $final_output .= file_get_contents('javascript2.js');
}

$final_output .= file_get_contents('javascript3.js');

echo $final_output;

答案 5 :(得分:0)

如果静态javscript代码量大于你的dinamically创建的javascript代码量,你可以像往常一样编写javascript代码,然后在需要的时候注入php。

假设index.php的例子:

<?php

    $message = "Yo its true omg!";

?>

<html><head>

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

</head><body>

    ...

</body></html>