【问题标题】:Easier way to dynamically create Javascript using PHP使用 PHP 动态创建 Javascript 的更简单方法
【发布时间】: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; 等...

标签: php javascript jquery mysql html


【解决方案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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-11
          • 1970-01-01
          • 2010-10-05
          • 2016-08-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多