PHP echo中的JavaScript并不明显
JavaScript in PHP-echo is not noticeable
在我的HTML页面中,我有一个带有action="register.php"
和<p id="slogan">
的form
。我希望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)
背后的原因是等待三秒,这样你就有时间在重定向到谷歌之前注意到更新的段落。
这在很多方面都是一个糟糕的实现(听我说完)。
首先,我建议不要在页面中注入javascript。为什么?因为为了让javascript显示出来,您需要依赖两个因素:
- 要在客户端浏览器上启用的Javascript
- PHP在发生这种情况时休眠
这可能看起来像是两个小问题,但每次你让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。这是我不久前写的另一个答案,解释了差异,但实际上还有数百万其他答案:
使用
header("Location: someURL");
在script
实际发送到浏览器之前,您正在重定向到另一个页面(很可能会抛出错误,因为"someURL"可能不存在)。
正在缓冲echo语句。您必须配置脚本以避免缓冲。看看这个:如何在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);
问题是,由于PHP是后端,JavaScript是前端,因此在执行任何JavaScript之前,必须完成整个PHP脚本。这意味着sleep(3)
发生在JavaScript执行之前,并完全扼杀了其目的。它所做的只是浪费你三秒的时间。
如果你想输出一条消息并重定向,你需要想出其他方法。然而,这是另一个话题。
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 任何浏览器都不支持javascript函数
- 无法't在不使用Javascript刷新页面的情况下多次将值传递给文本框
- 使用Javascript dosn'我不使用javascript
- Laravel 5.2动态下拉选择不填充(javascript)
- 如何在不退出javascript的情况下从javascript更新网页
- Sinon Spy不使用Javascript调用或应用程序
- 它是否创建了许多不利于JavaScript性能的变量
- 使用jquery(而不是javascript)在锚标记中附加html
- 方块几乎不动(Javascript)
- 在不使用javascript的情况下,可以在表单字段中设置文本占位符(以提示最终用户插入特定格式)
- 段落选择();我不使用javascript
- 找不到javascript元素
- 运行时不存在Javascript函数
- 如何在不使用javascript执行的情况下为函数分配参数
- 如何在不更改Javascript页面的情况下访问用户输入的电子邮件
- 更改复选框不影响javascript
- onClick按钮不工作javascript/php/jquery mobile
- 有没有理由编写一个IIFE,用前导'不是'-JavaScript中的运算符(!)
- 将数组中的重复项转换为唯一项,而不删除Javascript中的任何项