You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AJAX表单多次提交后表单标识异常的解决方法问询

背景

我在网站上设置了一个邮件订阅表单。
该表单在每个网页的两个区域显示:头部和底部
这是完全相同的表单,仅为提升UX和可访问性而同时放在页面顶部和底部。
表单使用jQuery/AJAX脚本向用户返回成功和错误响应(例如:“Success! Your subscription is complete.”和“Error. Please review and re-submit”)。
用户提交表单时,输入信息会被添加到数据库,同时会向网站管理员发送通知邮件。
若使用头部表单,邮件主题为“Email Subscriber Added (Header Form)”。
若使用底部表单,邮件主题为“Email Subscriber Added (Footer Form)”。
(这是一种简单的统计各表单使用率的方法。)

PHP代码如下:

if ( $form_selected == 'header' ) {
    
        $mail->Subject = 'Email Subscriber Added (Header Form)';
        $mail->Body = $message;

} elseif ( $form_selected == 'footer' ) {
    
        $mail->Subject = 'Email Subscriber Added (Footer Form)';
        $mail->Body = $message;

} else {

        $mail->Subject = 'Email Subscriber Added (form version unknown)';
        $mail->Body = $message; 

}

截至目前,所有功能运行正常。


问题

问题在于,当网站用户在同一会话中多次提交邮件订阅时,网站管理员会收到上述PHP脚本中else分支的邮件(主题为“Email Subscriber Added (form version unknown)”)。正常会话中该分支不应被触发,但必须刷新页面后,才能再次正常触发if和elseif分支的判断。


问题咨询

是否可通过修改以下jQuery/AJAX脚本解决该问题?若有必要,也可修改PHP代码。

jQuery/AJAX代码

$(function() {

  // set up event listener
  $('#header-form, #footer-form').submit(function(e) {
    // disable html submit button
    e.preventDefault();

    // get the submit button
    var submitButton = $('[type=submit]', this);

    // get the messages element
    var formResponses = $('#header-form-responses, #footer-form-responses', this);
    formResponses.text(" ");

    // serialize form data
    var formData = $(this).serialize();

    // disable submit button to prevent unnecessary submission
    submitButton.attr('disabled', 'disabled');

    // tell users that form is sending
    submitButton.text('Processing...');

    // submit form via AJAX
    $.ajax({
        type: 'POST',
        url: $(this).attr('action'),
        data: formData
      })

      .done(function(response) {
        // make sure formResponses element has 'success' class
        $(formResponses).removeClass('error');
        $(formResponses).addClass('success');

        // set message text
        $(formResponses).text('Your subscription is complete. Thank you!');

        // clear form
        $('input').val('');
      })

      .fail(function(data) {
        // make sure formResponses element has 'error' class
        $(formResponses).removeClass('success');
        $(formResponses).addClass('error');

        // set the message text
        $(formResponses).text('Input error. Please review and re-submit.');
      })

      .always(function(data) { // this will always fire even if the request fails
        submitButton.removeAttr('disabled');
        submitButton.text('Send');
      });

  });

});

HTML代码

<!-- simplified HTML -->

<form action="process_form.php" method="post" id="header-form">
  <input type="email" name="email_subscription">
  <input type="hidden" name="formtarget" value="header">
  <button type="submit" name="submit_subscription">Submit (Header)</button>
  <p id="header-form-responses"></p>
</form>

<form action="process_form.php" method="post" id="footer-form">
  <input type="email" name="email_subscription">
  <input type="hidden" name="formtarget" value="footer">
  <button type="submit" name="submit_subscription">Submit (Footer)</button>
  <p id="footer-form-responses"></p>
</form>

内容的提问来源于stack exchange,提问作者Michael Benjamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:10:52