我的情况
我有一段 javascript,可以对 form.php 上的 Web 表单进行多项操作。该表单设置为 action="form.php"
,因此在提交时会自行加载。网络表单仅构建 if (!isset($_POST['submit']))
,因此发布后,构成网络表单的输入元素和容器不存在。代码的结构通常如下:
<?php if (!isset($_POST['submit'])) {
//the form has not been submitted
?>
<form action="<?php $_SERVER['PHP_SELF']?>" method="post" id="form" name="form">
<!-- general input elements -->
<input type="submit" name="submit" value="Send">
</form>
<?php }
else {
// the form has been submitted
// posted values are submitted to a database
}
?>
不过,JavaScript 仍然尝试对这些元素进行操作。由于这些不再存在,因此会发生错误。我可以对某个 HTMLElement 的每次操作使用一堆 if (HTMLElement)
语句,但我希望有一个更可靠、更通用的解决方案。
问题
鉴于表单提交到其页面,并且不能简单地在 POST 后继续显示表单,您是否有建议我如何检测 Web 表单的 POST 并关闭 javascript 的某些部分?
一个更普遍的问题是:
javascript 如何检测 php POST?
最佳答案
我想到的一件事是这样的:
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') $isPost = true; ?>
// later on in your script
<?php if (!$isPost): ?>
<script type="text/javascript">
// the JS code that manipulates your form
</script>
<?php endif; ?>
基本上,如果表单已发布,则不要渲染操作它的 JS 代码。如果该代码与您始终想要包含的其他代码混合在一起,那么您必须以稍微不同的方式进行工作。在这种情况下,您可以尝试:
<script type="text/javascript">
var isPost = <?php echo $isPost ? 'true' : 'false' ?>;
if (!isPost) {
document.getElementById('blah').doSomething();
}
</script>
关于php - 如何使用 javascript 检测 php POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804040/