2

我的情况

我有一段 javascript 可以对 form.php 上的 web 表单进行多次操作。表单设置为action="form.php"并因此在提交时自行加载。webform 只是构建的if (!isset($_POST['submit'])),所以在发布之后,构成 webform 的输入元素和容器都不在那里。这通常是代码的结构:

<?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 仍然尝试对这些元素进行操作。由于这些不再存在,因此会发生错误。if (HTMLElement)我可以为对某个 HTMLElement 的每次操作使用一堆语句,但我希望有一个更可靠、更通用的解决方案。

问题

鉴于表单提交到其页面,并且不能在 POST 后简单地继续显示表单,你有什么建议我可以检测到 webform 的 POST 并关闭我的 javascript 的某些部分吗?

一个更普遍的问题是:

javascript如何检测php POST?

4

1 回答 1

2

想到的一件事是这样的:

<?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>
于 2012-08-03T22:27:52.473 回答