提交表单,刷新页面前显示div

Posted

技术标签:

【中文标题】提交表单,刷新页面前显示div【英文标题】:Submit form, show div before refreshing page 【发布时间】:2019-05-01 14:08:08 【问题描述】:

在重新加载提交表单上的页面之前,我不想在 2 秒内显示微调器。

<form class="ready" action="https://link.com" method="post">
<input name="test" type="submit" class="click" value="order"/>
</form>

我已经让微调器工作了:

<div class="thespinner"></div>    
<script>    
    $('.click').click (function ()     
    $(".thespinner").fadeIn("slow"); 
    );
</script>

尝试使用此代码简单地向微调器添加链接延迟,但数据没有进入数据库:

<script>
$('.click').click (function (e) 
$(".thespinner").fadeIn("slow");
   e.preventDefault(); //will stop the link href to call the blog page

   setTimeout(function () 
       window.location.href = "https://link.com";
    , 2000);
);
</script>

所以 - 单击按钮,显示微调器 2 秒,然后加载操作 url/重新加载页面(数据应该在微调器显示时发送)。

提前致谢!

附:我通常不会编写 javascript

【问题讨论】:

window.location.href = "https://link.com"; 不发送数据。您需要提交表单:$('.ready').submit(); 您似乎也在问(the data should be send while spinner is showing) 的内容根本不会那样工作,这需要通过 ajax 发送表单。听起来您想重新创建您在其他地方看到的东西,而没有真正了解底层机制是什么。为什么要显示一个微调器两秒钟?如果发送数据需要一段时间,并且您想在此期间显示微调器,有更好的方法来实现。 我们正在对“计算”发出请求,而在服务器计算(sql-server)时,我们不想制作一个小 gif,这样人们就不必再次刷新页面(并且数据库有时间发送数据) 我用我的版本发布了答案;当您提供反馈时,请逐字记录您遇到的所有错误。 【参考方案1】:

您需要在重定向之前通过 ajax 发送表单

$('#theForm').bind('submit', function (e) 
    e.preventDefault();
    $(".thespinner").fadeIn("slow");
    $.ajax(
        type: "POST",
        url: 'someurl.htm',
        data: ,
        success: function () 
            setTimeout(function () 
                window.location.href = "https://link.com";
            , 2000);
        ,
        error: function(jqXHR, textStatus, error) 
          console.log(textStatus)
        
    );
);
.thespinner  display: none; 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="thespinner">Spinner</div>
<form id="theForm" >
  <input type="text" name="something" />
  <button>Submit</button>
</form>

【讨论】:

不工作 - 但刚刚意识到我们在提交时将数据放入数据库中的表中。这可能是问题所在吗? 你能澄清你所说的“不工作”是什么意思吗?有一个具体的错误吗?我假设你的意思是你正在调用一个将东西放入数据库的 API?只要您的 API 提供适当的响应,这应该不会产生影响。【参考方案2】:

下面是如何在 AJAX 请求期间显示微调器(即在后台发送表单数据),然后在请求完成后重定向:

$('.ready').submit(function(e) 
  $(".thespinner").fadeIn("slow");
  e.preventDefault(); //will stop the link href to call the blog page
  $.post("https://jsonplaceholder.typicode.com/posts", $(this).serialize(), function(reply) 
    window.location.href = "https://link.com";
  );
);
.thespinner 
  display: none;
  text-align: center;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="ready" action="https://link.com" method="post">
  <input name="test" type="submit" class="click" value="order" />
</form>
<div class="thespinner"><img src="https://loading.io/spinners/wave/index.wave-ball-preloader.svg"></div>

【讨论】:

以上是关于提交表单,刷新页面前显示div的主要内容,如果未能解决你的问题,请参考以下文章

ajax中的表单提交而不刷新整个页面只刷新ATG中的特定div标签

使用 jQuery-AJAX 向 PHP 提交表单并在不刷新的情况下在 div 中显示新内容的问题

Ajax页面刷新错误

PHP 表单提交到 MySQL,无需刷新/重定向

求助:PHP多表单提交问题,一个页面提交N多个表单

表单重复提交问题