Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止在PHP表单订阅后重新加载页面?_Javascript_Php_Html_Jquery_Forms - Fatal编程技术网

Javascript 如何防止在PHP表单订阅后重新加载页面?

Javascript 如何防止在PHP表单订阅后重新加载页面?,javascript,php,html,jquery,forms,Javascript,Php,Html,Jquery,Forms,我有这个基本的PHP表单,我想在按下提交按钮后防止页面刷新。或者更像,我希望在发送表单后创建一个确认段落 我非常接近,但我想这一段没有显示出来,因为页面正在刷新 if($_POST["submit"]) { $recipient="contact@d.com"; $subject="Form to email message"; $sender=$_POST["sender"]; $senderEmail=$_POS

我有这个基本的PHP表单,我想在按下提交按钮后防止页面刷新。或者更像,我希望在发送表单后创建一个确认段落

我非常接近,但我想这一段没有显示出来,因为页面正在刷新

if($_POST["submit"]) {
$recipient="contact@d.com";
$subject="Form to email message";
$sender=$_POST["sender"];
$senderEmail=$_POST["senderEmail"];
$message=$_POST["message"];

$mailBody="Name: $sender\nEmail: $senderEmail\n\n$message";

mail($recipient, $subject, $mailBody, "From: $sender <$senderEmail>");

$thankYou="<div class='thanksDiv'><p>Thank you! Your message has been sent. I'll get back to you ASAP. <i class='as fa-smile-beam'></i></p><a style='cursor:pointer' class='thanksExit'><i class='fas fa-times fa-2x'></i></a></div>";
}
if($\u POST[“提交”]){
$recipient=”contact@d.com";
$subject=“表单到电子邮件”;
$sender=$_POST[“sender”];
$senderEmail=$\u POST[“senderEmail”];
$message=$_POST[“message”];
$mailBody=“Name:$sender\nEmail:$senderEmail\n\n$message”;
邮件($recipient,$subject,$mailBody,“From:$sender”);
$Thankyu=“谢谢!您的邮件已发送。我会尽快回复您。

”; }

名称
电子邮件
我能帮忙吗?

它们是解决该问题的不同方式和方法

我是如何做到的: 我有一个处理php,它将接收帖子并发送电子邮件,然后我将用户重定向到感谢页面

header("location: thanks.php);
exit();

您还可以使用ajax,并在按下按钮后禁用该按钮。这取决于开发人员、框架和编程偏好。

一些解决方案:

如果用户不需要停留在与相同的页面上,则重定向到成功/感谢页面

如果用户需要停留在同一页面上,则您有几个选项:

方法A:

  • 如果未发布任何内容(即初始页面加载),则使用表单标识符(任何内容)设置会话。e、 g.
    if(!isset($\u POST['field']){$\u SESSION[''..
  • 提交表单时,检查是否存在具有表单标识符的会话,然后销毁会话
  • 现在,如果它被刷新,会话将不存在,您可以通知用户它已经提交
  • 问题是,如果会话超时并且刷新完成,它将通过

    方法B:

    禁用刷新:

    方法C:

    检查数据库中的重复输入

    方法D:(我不喜欢这个,但它用得很多)


    重新加载同一页面,并根据脚本的执行位置,将php header()或javascript附加到URL后的
    '&t='.time()

    首先需要将一些数据从php发送回AJAX

    session_start();
    if(isset($_POST["submit"])) {
      $recipient="contact@d.com";
      $subject="Form to email message";
      $sender=$_POST["sender"];
      $senderEmail=$_POST["senderEmail"];
      $message=$_POST["message"];
    
      $mailBody="Name: $sender\nEmail: $senderEmail\n\n$message";
    
      mail($recipient, $subject, $mailBody, "From: $sender <$senderEmail>");
    
      $thankYou="<div class='thanksDiv'><p>Thank you! Your message has been sent. I'll get back to you ASAP. <i class='as fa-smile-beam'></i></p><a style='cursor:pointer' class='thanksExit'><i class='fas fa-times fa-2x'></i></a></div>";
        
      echo $thankYou;
    }
    
    
    名称
    电子邮件
    我能帮忙吗?
    
    这将通过javascript和ajax来完成。而“不起作用”对于继续帮助您解决问题并没有太大帮助。请包含您的ajax代码。我确信,如果php文件编写正确,这和ajax post调用将起作用。我的错!我已经使用了:$(“#myForm”).submit(函数(){$.post($(This.attr(“action”),$(This).serialize();return false;});上面的“AJAX”中的一个错误是它不是AJAX..缺少
    $.AJAX({
    等等。是的,这是一个快速的方法,但我不想重定向用户。-坏UX为什么是坏UX?这种改变是在服务器端,用户不知道代码在哪里执行或重定向。你是什么意思?用户提交表单后被重定向到另一个页面很烦人。很简单。是吗用户关心您如何编写php代码吗?这对用户来说是透明的,没有呈现的页面不是加载一个页面并重定向到另一个页面。您进行处理,然后将其发送到感谢页面。这种方法非常正常。顺便说一句,这也是消除刷新或双击ajax时重新提交的最干净方法。No复杂的会话处理,没有额外的代码会带来比解决方案更多的问题。做了这些更改后,现在我在加载此页面不工作时收到一个eror HTTP错误500>,感谢您的解释though@DianaCristina这表明您的PHP或Web服务器有错误当我将if($\u POST[“submit”])替换为if(issset($\u POST[“submit”])时,我得到了那个错误。尽管如此,当我将if($\u POST[“submit”])保留为if($\u POST[“submit”])时,它仍然会重新加载页面。其余内容与您编写的页面相同。@DianaCristina the
    isset()
    函数应该可以工作,请参阅:如果不可以,并且生成错误,这表明您的PHP存在问题。找到问题所在。只是一个恼人的打字错误。它是isset而不是isset。它仍然不工作。现在我单击“提交”按钮,但什么也没有发生-这很好,因为它不会重新加载页面,但邮件不会发送。是吗你知道我能做什么吗?