【问题标题】:How to stay on the same page after POST action is called in PHP [duplicate]在 PHP 中调用 POST 操作后如何保持在同一页面上 [重复]
【发布时间】:2021-02-25 17:14:38
【问题描述】:

我有一个简单的在线表单,它在提交时调用 PHP 脚本。

<form name="newform" id="regForm" action="../includes/submit.inc.php" method="post">

单击提交按钮时,浏览器中的站点 URL 变为 http://example.com/includes/submit.inc.php,页面为空白。

我想在提交表单后显示一条感谢消息,并且我希望 URL 保持为http://example.com

我尝试使用 JS 隐藏我网站的主容器并启用带有感谢消息的 DIV。

function submit() {
    document.getElementById("main").style.display = "none";
    document.getElementById("success").style.display = "inline";
}

document.getElementById('regForm').onsubmit = function () {
    var terms = document.getElementById('consentBox');

    if (!terms.checked) {
        showWarnings(warnings);
        return false;
    }
    submit();
    return true;
    
};

这种作品我可以在一瞬间看到感谢消息,但随后浏览器转到http://example.com/includes/submit.inc.php,页面为空白。我真的想避免重定向到另一个 .php 文件。我知道我可以这样做:

header( "location: ../success.php", true, 301 );

但更喜欢在同一页面上显示消息。我怎样才能做到这一点?

提前致谢。

【问题讨论】:

  • 1) 您可以将所有逻辑放在同一个文件中,在这种情况下,您将提交到同一个页面并在提交后显示消息。 2)您可以使用AJAX提交表单。
  • @El_Vanja 1) 我想要一些分离 2) 我会研究 AJAX
  • @Teemu 谢谢。会看看
  • 实际上你可以将提交逻辑写在一个单独的文件中,如果需要的话,可以用require()包含它。这些解决方案之间的真正区别在于您处理提交的方式(同步与否)。

标签: javascript php


【解决方案1】:

您可以在编写主要代码的同一页面中添加 post php 代码。 例如-

<form name="newform" id="regForm" action="inex.php" method="post">

<?php
//and your php post code here 
?>

【讨论】:

  • 它仍然是浏览器中的一个新文档。这意味着上一页的状态被新状态、JS 变量、可能的 DOM 操作等替换,它们都消失了。
【解决方案2】:

这可以通过使用AJAX和表单的序列化来实现。这是在假设 php 脚本在成功完成后返回状态消息(要显示的 html 块)的情况下编写的。如果 php 脚本中存在问题,这也有助于错误处理。此示例使用jQuery library

<form name="myForm" id="myForm">
  <input type="text" name="input1">
  <input type="text" name="input2">
</form>
// Using jQuery 

$('#myForm').submit(function(e) {

  //Prevent Default
  e.preventDefault();

  // Gather Form Values into Array  
  var values = {};
  $.each($('#myForm').serializeArray(), function(_, kv) {
    values[kv.name] = kv.value;
  });

  $.ajax({
      method: "POST",
      url: "pathToFile/formHandlingFile.php",
      dataType: "html",
      data: {
        vals: values
      }
    })
    .done(function(data) {
     
     $('#main').hide()
     $('#success').html(data)
     $('#success').show()

    })

});

【讨论】:

  • 嗨,艾登,这很有帮助。当我提交表单时,它到达 $('#success').show() 行,但数据没有提交到我的数据库。我想知道这是否与我的 php 文件的位置有关。结构是 root/includes/submit.inc.php 而对于 index.php 它是 root/index.php url 属性当前是 url: "includes/submit.inc.php" 这是正确的吗?
  • 嘿,T 先生 - 这听起来对我来说是正确的。由于在 ajax 请求中处理了路径,因此 php 脚本输出的信息不需要包含任何路径信息。换句话说,您可以简单地使用 php 脚本回显信息,并且它应该在数据变量中返回。我会确保您可以在 DOM 中看到带有静态信息的 #success 元素。还要确保使用 POST 将数据传递给 PHP 脚本。
猜你喜欢
  • 2018-05-04
  • 2023-03-28
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多