如何使用javascript检测php POST?

时间:2012-08-03 22:17:53

标签: php javascript post webforms

我的情况

我有一段javascript,它对form.php上的webform进行了多次操作。表单设置为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的每个操作,但我希望有一个更坚实,更通用的解决方案。

问题

鉴于表单提交到其页面并且在POSTing之后不能简单地继续显示表单,您是否有建议如何检测webform的POST并关闭我的javascript的某些部分?

更普遍的问题是:

如何通过javascript检测php POST?

1 个答案:

答案 0 :(得分: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>