【问题标题】:How can a php POST be detected using javascript?如何使用 javascript 检测 php POST?
【发布时间】:2012-08-01 23:50:12
【问题描述】:

我的情况

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

问题

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

一个更普遍的问题是:

javascript如何检测php POST?

【问题讨论】:

  • 您真的提交了表格吗?或者只是通过javascript重新加载表单?请给代码!
  • 您不能在提交页面上执行一些 PHP,将结果保存到会话(或数据库等),然后将表单页面重新加载回其原始状态吗?如果不是,为什么不在 javascript 上使用相同的 PHP IF 条件?
  • Client-side detection of HTTP request method 的可能重复项,问:“是否可以从 JavaScript 检测页面的 HTTP 请求方法(例如 GET 或 POST)?如果可以,如何?”。 A:“一句话——不”
  • 感谢您的意见。您的 cmets 以一种有价值的方式帮助我理解了这个问题。

标签: php javascript post webforms


【解决方案1】:

想到的一件事是这样的:

<?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>

【讨论】:

  • 我发现您的第一个建议是一个非常好的和优雅的解决方案。操作表单的所有 javascript 本质上都在一个 .js 文档中,所以我可以简单地将文件调用为仅if (!isset($_POST['submit']))。谢谢您的回答。这正是我想要的。
猜你喜欢
  • 2012-07-03
  • 2016-11-07
  • 2013-04-28
  • 2017-08-08
  • 2014-01-04
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多