使用表单提交重定向进行延迟

Posted

技术标签:

【中文标题】使用表单提交重定向进行延迟【英文标题】:Making delay with form-submit-redirecting 【发布时间】:2019-04-23 01:43:29 【问题描述】:

我正在使用 Liveform 服务在我的网络中发送电子邮件。现在每次提交时它都会提示失败或成功的消息。

虽然显示失败消息有效,但显示成功消息却没有——因为我在它有机会出现之前就获得了重定向。所以我需要以某种方式延迟它。

这是我的代码:

$(document).ready(function() 
  $('#emailError').removeClass('active');
  $('#contact-form').submit(function(e) 
    var email = $('#email').val();
    console.log(email);
    var message = $('#message').val();
    console.log(message);

    if (!email || !message) 
      alertify.error('Please enter an email and a message');
      e.preventDefault();
      return;
    
    // REDIRECT IN THIS POINT- > HOW TO DELAY HERE?
    setTimeout(function() 
      alertify.success('SENT SUCCESSFULLY!');
    , 3000);
  );
);
<form action="https://liveformhq.com/form/911331a2-0d5e-4fbf-abb0-******" method="POST"
              accept-charset="utf-8" id="contact-form">
              <input type="email" placeholder="Email..." id="email" name="email" />
              <textarea rows="4" cols="50" placeholder="Message..." id="message" name="message"></textarea>
              <div class="actions"><button type="submit">Send</button></div>
            </form>

如何让服务器等待几秒钟,直到出现警报? 正如你所看到的那样使用超时没有用。

谢谢

【问题讨论】:

相关***.com/questions/951021/… 【参考方案1】:

请注意,您实际上并没有进行提交——相反,您只是捕捉到表单已提交。如果您想在提交时获得真正的成功/失败状态,那么您可能想要劫持表单提交过程,并替换您自己的。

This is taken from a related question,但适合您的使用。

$("#myform").submit(function(event) 
  // Hijack the form submit. We want to control this ourselves.
  event.preventDefault();

  // get the form field values
  var email = $('#email').val(),
      message = $('#message').val();

  // Do we have both an email and message? If not, alert and stop.
  if(!email.length>0 && !message.length>0) 
    alertify.error("Please enter an email and message.");
    return false;
  

  // I like to use defers :)
  // submit our post data, and include the form values as the POST body
  deferred = $.post("http://somewhere.com",  email: email, message: message );

  // Having hijacked the POST process, we have the success callbacks
  deferred.success(function () 
    alertify.success('SENT SUCCESSFULLY!');
  );

  // also, if the POST failed, we can notify the user of that.
  deferred.error(function () 
    // Handle any errors here.
  );
);

在此处阅读有关jQuery.post() 的更多信息。另外,关于 deferred 或 Promises 的更多信息。 javascript 从 jQuery 的发展方式中吸取了一些教训,并添加了一种设置动作的方法,该动作可能需要一些不确定长度的延迟——通常与服务器对话。

Javascript 给了我们一个 Promise,这很像在餐馆下订单。你把你的单子放进去,然后你等着听到“Order UP!!”。那时,当您的饭菜准备好时,您的服务员会为您端上食物。如果订单出现严重错误(比如大量使用培根),订单仍然会完成,但会出现错误,此时您的女服务员会过来告诉您。

$.post(...) 使用承诺。所以我们可以为完成的 Promise 添加一个 .success(...) 处理程序,并在 Promise 失败时添加一个 .error(...) 处理程序。

我真心推荐阅读有关 Promises 的 MDN 文档,尤其是 fetch(...)。

【讨论】:

你能解释一下延期吗? 我认为更新了我的帖子以包含一个非常全面的描述。

以上是关于使用表单提交重定向进行延迟的主要内容,如果未能解决你的问题,请参考以下文章

如果表单提交成功并保留在页面上,如何使用js进行重定向

当引导验证成功时,如何使用 $.post 提交表单而不进行页面重定向?

如何在提交时进行表单重定向[重复]

使用纯javascript提交表单后重定向

在用户填写提交表单后将其重定向到他们的提交

需要帮助在提交时重定向表单