PHP-echo中的JavaScript并不明显

时间:2015-11-25 00:21:54

标签: javascript php html

在我的HTML页面中,我有form action="register.php"<p id="slogan">。我希望register.php中的PHP代码通过回显一些Javascript来更改<p>的值。

但是,我的HTML页面中的段落没有变化,我不明白为什么。

这是我的简化HTML页面包含的内容:

<body>
  <p id="slogan"> hello </p>    

  <form action="../scripts/register.php" method="post">
    ...
  </form>
</body>

这是我简化的register.php包含的内容:

<?php
...
if (mysqli_query($conn, $sql)) {
    header("Location: http://www.google.com");
    echo "<script>
        document.getElementById('slogan').innerHTML = 'Character successfully introduced.';
        </script>";
    sleep(3);
} 
?>

回显的JavaScript应该将"hello"更改为"Character successfully created."

sleep(3)背后的原因是等待三秒钟,以便您在重定向到Google之前有时间注意更新后的段落。

4 个答案:

答案 0 :(得分:2)

这是一种糟糕的实施方式(听我说)。

首先我建议不要在网页上注入javascript。为什么?因为为了显示javascript,你需要依赖两个因素:

  1. 在客户端的浏览器上启用Javascript。
  2. PHP在睡觉时睡觉。
  3. 看起来似乎只有两个小点,但每次你将PHP发送到睡眠状态时实际上都是一个阻止者 - 而这种情况发生时,没有别的。

    此外,如果我正确地理解你的理论,你的代码中会有轻微的缺陷 - 似乎你想在“主脚本”页面而不是中间register.php页面注入成功消息。如果是这样的话,它永远不会被执行。如果我错误地选择了你,那么值得在问题中添加更多代码来澄清究竟发生了什么。

    替代方法

    我的建议是做类似以下的事情:

    register.php

    if($your_var == 1) {
      header('Location: youroriginalscript.php');
      $_SESSION['yoursessionvar'] = 'Character successfully created.';
    }
    

    youroriginalscript.php

    ... (beside your slogan HTML entity) ...
    <div id="slogan">
        <?php
        if(isset($_SESSION['yoursessionvar'])){
            echo $_SESSION;
        }
        ?>
    </div>
    

    这绝不是完美的,但它应该让你有一个入门的想法。

    您的原始脚本还假定角色创建始终成功。情况可能并非如此,在给客户提供误导性反馈之前应该仔细检查。检查它,确保它是正确的,并且永远不要假设它在页面跃点之间保持不变!

    提示 :如果您尝试让PHP睡觉或做一些疯狂的事情,它总是会始终总是创建瓶颈。

    修改

    好的,从您编辑过的问题来看,您似乎已经将PHP / Javascript混淆了一点。 Here's another answer我后来写了一段时间来解释差异,但其中有数百万人在那里:

答案 1 :(得分:0)

header("Location: someURL");

您正在重定向到另一个页面(很可能是因为&#34; someURL&#34;可能不存在)之前 script实际发送到浏览器。

答案 2 :(得分:0)

正在缓冲echo语句。您必须配置脚本以避免缓冲。看看这个:How to disable output buffering in PHP

试试这个:

header("Location: someURL");

@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++)
ob_end_flush();
ob_implicit_flush(1);

echo "<script>
      document.getElementById('slogan').innerHTML = 'Character successfully created.';
    </script>";
sleep(3);

答案 3 :(得分:-1)

问题在于,由于PHP是后端而JavaScript是前端,因此整个PHP脚本必须在执行任何JavaScript之前完成。这意味着sleep(3)执行JavaScript之前发生了并完全杀死了它的目的。它所做的就是浪费三秒钟的时间。

如果您想输出消息并重定向,则需要采取其他方式来实现。然而,这是另一个话题。