【问题标题】:Cant echo PHP variable inside <script> tags? [closed]不能在 <script> 标签内回显 PHP 变量? [关闭]
【发布时间】:2016-11-10 06:19:02
【问题描述】:

这是我的 PHP 代码。我希望使用警告窗口显示错误。

 if ($projectid=="")
  {
    $error = 'You must choose a project.
              Click &lsquo;back&rsquo; and try again.';
    include error.html.php';
    exit();
  }

这是应该由浏览器解析的error.html.php

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Script Error</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">


    </head>

    <body>

         <script> 
             var error = <?php echo   $error ; ?>;
              window.onload = function(){ alert(error); }
         </script>
    </body>
</html>

脚本标签怎么样?它们会阻止 PHP 运行吗?

【问题讨论】:

  • 警报显示什么?
  • javascript在客户端执行,php在服务器端和nary twain会见...
  • @Katie lol - 如果 Javascript 是内联 HTML 而不是在 JS 文件中,那么您可以在其中使用尽可能多的 PHP。
  • ` `
  • @Katie 我希望人们也不要尝试将两者混合,但 PHP 可以回显客户端执行的 javascript...

标签: javascript php html json


【解决方案1】:

真正的问题是你的渲染结果是这样的:

var error = You must choose a project.
            Click &lsquo;back&rsquo; and try again.

在您看来,这看起来像是有效的 JavaScript 吗?我认为不会。

var error = <?=json_encode($error);?>;

这应该导致:

var error = "You must choose a project.\r\n                 Click &lsquo;back&rsquo; and try again.";

好多了。

【讨论】:

  • 是的,我不知道我需要 JSON。谢谢 !什么是 JSON,为什么需要它?
  • 从技术上讲,你没有。这只是一种重新格式化字符串的方式,以便 JS 可以理解它。它会使用\n 替换文字换行符,因此解释器可以理解这是一个字符串的一部分。您也可以手动执行此类操作,但 JSON 格式化程序是一个有用的快捷方式。
【解决方案2】:

您的问题是javascript 在客户端运行,将在页面加载后运行,因此在php 在服务器上运行之后运行。

但是,您可以执行以下操作,允许php 在页面加载时设置javascript 变量的值,然后在页面加载后运行javascript 以显示消息。

<?php 
$error = "test me";
echo "<script>error = '" . $error  . "'</script>";
?>

<script>
var error;
window.onload = function(){
    alert(error);
}

</script>

更新 根据您的编辑,这是一个更新的答案。 加载页面时需要echo "&lt;script&gt;error = '" . $error . "'&lt;/script&gt;"$error 分配给javascript 变量。

if ($projectid=="")
  {
    $error = 'You must choose a project.
              Click ‘back’ and try again.';
    echo "<script>error = '" . json_encode($error)  . "'</script>"
    include error.html.php';
    exit();
}

还有html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Script Error</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">


    </head>

    <body>

         <script> 
             var error;
              window.onload = function(){ alert(error); }
         </script>
    </body>
</html>

【讨论】:

  • 我确实合并了您的解决方案,但它不起作用。我已经编辑了我的问题以包含更多详细信息。
  • php 不能包含在 &lt;script&gt; 标记中。我将用它的外观更新我的答案。
  • 请注意,如果包含特殊字符,则必须使用 json_encode()。我已经更新了答案,所以它可以工作。我用它的简单字符等效替换了特殊实体
  • 太棒了!这样可行。我不熟悉 ?JSON。为什么需要这样做?
  • json_ 函数是一种用于在不同编程语言之间交换数据的简单格式。您正在通过浏览器输出将值从 php 发送到 javascript。在编写 javascript 变量声明时,例如error = 'some message here', 'some message' 可能包含会破坏代码的字符 - 例如'玛丽的鞋子'。通过使用 json_encode,您可以让函数转义所有特殊字符。查看文档以了解您可以使用的不同选项。使用这个json_encode,你也可以传递数组。
【解决方案3】:

如果你的 PHP 中有 $error,那么你可以这样写:

<?php
   echo "<html><head></head><body></body>";

   $error = "whoops!"; // just for testing

   echo "<script>\n";
   echo "alert('{$error}')\n";
   echo "</script>\n";

   echo "</html>";
?>

一旦页面加载,警报就会发生,并在我的服务器上进行了测试。这是针对服务器端发生 $error 的情况。 (顺便说一句,感谢我今天晚些时候提出的有趣问题!)

【讨论】:

  • 我正在使用 PHP 7。它仍然无法正常工作。我不确定发生了什么。
  • 您还需要确保生成正确的 HTML 标题,以便浏览器具有上下文...我在一个完整的 HTML 页面中运行我的(这段代码在底部)跨度>
  • 好的,我用在我的服务器上运行的完整文件编辑了我的答案,以确保我们运行的是相同的东西。
【解决方案4】:

其实很简单。

if ($projectid=="")
{
    $error = 'You must choose a project.
              Click &lsquo;back&rsquo; and try again.';
    include 'error.html.php';
    exit();
}

$error 现在将包含You must choose a project. Click &amp;lsquo;Back&amp;rsquo; and try again。注意,没有引号,所以行

var error = <?php echo   $error ; ?>;

在客户端看起来像这样:

var error = You must choose a project. 
Click &lsquo;Back&rsquo; and try again;

这自然会导致错误,因为这不是有效的 javascript。您需要在 $error 服务器端的定义内或 PHP 外添加引号 - 类似于:

$error = '"You must choose a project.
              Click &lsquo;back&rsquo; and try again."';

var error = '<?php echo   $error ; ?>';

根据您的喜好...

【讨论】:

    【解决方案5】:

    您当然可以使用内联 php 来生成 javascript 代码。当然,它们将在不同的上下文中执行,服务器端与客户端,但这大多无关紧要。

    但是,您必须意识到这两种语言并没有像这样进行通信,而是由 PHP 的输出生成部分 JS。你必须小心那个输出。您遇到的问题之一是 JS 不支持多行字符串,因此 PHP 中 $error 的值不能有换行符。

    试试这个:

    if ($projectid=="")
      {
        $error = 'You must choose a project. Click \"back\" and try again.';
        include 'error.html.php';
        exit();
      }
    

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <title>Script Error</title>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1">
    
    
        </head>
    
        <body>
    
             <script> 
                 var error = "<?php echo $error ; ?>";
                  window.onload = function(){ alert(error); }
             </script>
        </body>
    </html>
    

    修复列表:

    1. include 语句中的固定引号。
    2. 在 JS 代码中的内联 PHP 回显周围添加了引号。
    3. 删除了 $error var 中的换行符,以便 JS 将其全部放在一行中。
    4. 删除了 html 引号并将其替换为转义的常规引号。警报框不会处理这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多