【问题标题】:Echo PHP variable from JavaScript?从 JavaScript 回显 PHP 变量?
【发布时间】:2011-01-01 04:35:39
【问题描述】:

我也有一个带有一些 JavaScript 代码的 PHP 页面,但是下面的这个 JavaScript 代码似乎不起作用,或者我可能已经走了!

我正在尝试这样的事情:

  var areaOption=document.getElementById("<?php echo @$_POST['annonsera_name']?>");
  areaOption.selected=true;

我也试过这个,但它只会提醒一个空白警报框:

    alert (<?php echo $test;?>); // I have tried this with quotes, double-quotes, etc... no luck

我的想法完全错了吗?

更新

一些PHP代码:

    <?php 
        $test = "Hello World!";
    ?>

【问题讨论】:

  • 您在这里缺少引号:alert ();应该警惕 ('');
  • 如果你用整个周围的标记更新你的问题会有所帮助。
  • 您能否将生成的 JavaScript 粘贴到浏览器中?
  • 哇,我从 SO 开始就没见过这么没用的例子。您想通过更新告诉我们什么?
  • 在大多数情况下,您应该远离使用@。它很慢,可能会导致调试问题。

标签: php javascript html


【解决方案1】:

在您的第二个示例中,您在字符串周围缺少引号(因此 H 被解释为变量 - 您没有设置)。

测试一下:

alert (<?php echo "'H'";?>);

alert ('<?php echo "H";?>');

【讨论】:

  • 第二个警报正是这个警报框:...我希望 H 被提醒,或者最好是一个变量...第一个建议只提醒一个空白的警报框!
  • 您的文件的扩展名是什么?是 .js 吗?如果是这样,php 将不起作用(默认情况下)
  • @harshath.jr,请注明!扩展名是js,对!
  • 只有当脚本文件以 Web 服务器期望为 PHP 代码的扩展名结尾时,PHP 代码才会被解释为这样:.php(其他扩展名是可能的,但这是一个不同的主题)。跨度>
  • @Camran 发布详细答案
【解决方案2】:

PHP 在服务器端运行,Javascript 在客户端运行。

过程是PHP生成将在客户端执行的Javascript。

您应该能够检查仅查看代码生成的 JS。当然,如果 JS 依赖于一些 PHP 变量,则需要在 输出 JS 之前实例化它们。

<?php
$test = 'Hello world';
?>
<html>
    <body>
        <script>
            alert('<?php echo $test; ?>');
        </script>
    </body>
</html>

会起作用,但是

<html>
    <body>
        <script>
            alert('<?php echo $test; ?>');
        </script>
    </body>
</html>
<?php
$test = 'Hello world';
?>

不会

【讨论】:

    【解决方案3】:

    使用json_encode 将一些文本(或任何其他数据类型)转换为 JavaScript 文字。 不要只在回显的字符串周围加上引号 — 如果字符串中有引号、换行符或反斜杠怎么办?最好的情况是您的代码失败,最坏的情况是您有一个旧的跨站点脚本安全漏洞。

    所以,

    <?php
        function js($o) {
            echo json_encode($o, JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP);
        }
    ?>
    <script type="text/javascript">
        var areaOption= document.getElementById(<?php js($_POST['annonsera_name']); ?>);
        areaOption.selected= true;
        alert (<?php js('Hello World'); ?>);
    </script>
    

    【讨论】:

      【解决方案4】:

      您使用@$_POST 表示您已收到(或预期)错误 - 检查您生成的源以查看该值是否正确输出。否则document.getElementById 将失败,您将无法获得任何输出。

      【讨论】:

        【解决方案5】:
         alert("Delete entry <? echo $row['id']; ?> ")
        

        【讨论】:

          【解决方案6】:

          如果你的扩展名是 js,php 在那个文件里是不行的。

          原因是,php 会解析它应该解析的文件。 php 将解析的文件类型在 httpd.conf 中使用 AddType 命令(或指令,无论它们被称为什么)进行配置。

          所以你有 3 个选择:

          • 将文件类型 js 添加到 php 将解析的文件列表中(糟糕,非常糟糕)
          • 将脚本内嵌到某个 php 文件中
          • 将文件重命名为 script.js.php,并在文件开头指定内容类型,如下所示:

          干杯!

          【讨论】:

          • 或折衷方案,通过 PHP 中的内联 &lt;script&gt; 元素将数据放入变量中,并让外部静态 .js 文件获取它。您通常不希望通过 PHP 提供脚本文件,因为除非您投入大量精力设置正确的标头,否则您将破坏缓存并增加网络和服务器负载。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-06
          • 1970-01-01
          • 2015-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多