无法在<script>标签内回显PHP变量?

时间:2016-07-07 19:28:29

标签: javascript php html json

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

&#xA;&#xA;
  if($ projectid ==“”)&#xA; {&#XA; $ error ='你必须选择一个项目。&#xA;点击&amp; lsquo; back&amp; rsquo;然后再试一次。';&#xA;包括error.html.php';&#xA;出口();&#XA; }&#xA;  
&#xA;&#xA;

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

&#xA;&# xA;
 &lt;!DOCTYPE html&gt;&#xA;&lt; html lang =“en”&gt;&#xA; &LT; HEAD&GT;&#XA; &lt; meta charset =“utf-8”&gt;&#xA; &lt; title&gt;脚本错误&lt; / title&gt;&#xA; &lt; meta charset =“utf-8”&gt;&#xA; &lt; meta http-equiv =“X-UA-Compatible”content =“IE = edge”&gt;&#xA; &lt; meta name =“viewport”content =“width = device-width,initial-scale = 1”&gt;&#xA;&#xA;&#xA; &LT; /头&GT;&#XA;&#XA; &LT;身体GT;&#XA;&#XA; &LT;脚本&GT; &#XA; var error =&lt;?php echo $ error; ?取代;&#XA; window.onload = function(){alert(error); }&#XA; &LT; /脚本&GT;&#XA; &lt; / body&gt;&#xA;&lt; / html&gt;&#xA;  
&#xA;&#xA;

使用脚本标记?他们阻止PHP运行吗?

&#xA;

5 个答案:

答案 0 :(得分:6)

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

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.";

好多了。

答案 1 :(得分:1)

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

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

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

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

</script>

<强>更新 根据您的修改,这里有一个更新的答案。 在加载页面时,需要echo "<script>error = '" . $error . "'</script>"$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>

答案 2 :(得分:0)

如果您的PHP中有$错误,那么您可以写:

<?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的情况。 (顺便说一句,感谢今天晚些时候这个有趣的问题!)

答案 3 :(得分:0)

实际上这很简单。

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 &lsquo;Back&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."';

OR

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

根据您的喜好......

答案 4 :(得分:0)

你当然可以使用内联php生成javascript代码。当然,它们将在不同的环境中执行,即服务器端与客户端,但这几乎无关紧要。

但是,您必须意识到这两种语言不是这样通信的,但JS的一部分是由PHP的输出生成的。你必须小心那个输出。您遇到的一个问题是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. 包含声明中的固定引号。
  2. 在JS代码中添加了内联PHP echo的引号。
  3. 删除$ error var中的换行符,以便JS在一行中获取所有换行符。
  4. 删除了html引号,并将其替换为转义的常规引号。警报框不处理这些。