HTML表单并不总是提交

时间:2015-11-05 22:14:34

标签: javascript html forms

我有一个HTML表单,有时提交,有时不提交。表单是使用一个按钮提交的,该按钮使用javascript验证表单,然后使用javascript提交它:

<form id="my-form">
  <input type="hidden" name="csrf-token">
  <input type="text" name="1">
  <input type="text" name="2">
  <button onclick="validateForm()">
</form>

<script>
  function validateForm() {
    // Validate rules here
    document.forms['my-form'].submit();
  }
</script>

非常直截了当。然后将数据发送到服务器,检查csrf令牌,然后将输入保存到数据库中。我试图理解为什么表单不会一直提交。有时当我单击提交按钮时,页面只是重新加载,并且当其他时候将表单保存到数据库并且我被重定向到下一页时,数据就会消失。

据我所知,我相信这可能与到期有关。如果启动表单并将其保留太久,则不会提交。我每次提交表格时都会提交。然而,有时当我离开表单太久时,它会提交。

您可以想象,由于输入的数据有时会丢失,因此会有多么令人沮丧。这个问题可能是什么原因?感谢。

2 个答案:

答案 0 :(得分:0)

解决方案:
type="button"属性添加到<button>。这将停止表单处理您的按钮,如submit按钮。

说明:
“有时它有效”通常意味着你有竞争条件。您的竞争条件介于JavaScript和默认浏览器行为之间。 type的默认<button>属性为submit。示例代码中的表单没有actionmethod属性。对于这些条件,表单的默认行为是在单击按钮时为当前URL执行GET。按钮单击也将运行您的JavaScript。但是,根据默认行为重新加载页面的速度(或验证速度有多慢),您的javascript submit可能会受到影响,也可能不受影响。

答案 1 :(得分:0)

从我的角度来看,您正在使用CSRF令牌。 CSRF令牌具有基于您使用的框架/ CMS的到期时间。这几乎是可配置的。

现在发生的情况是,当CSRF令牌到期时,服务器拒绝输入。这个可能适合您。要检查这一点,请保持表单打开并在很长一段时间后提交,如果同一问题重复出现,请使用以下解决方案,否则这不是您的情况。

一个简单的解决方案是增加CSRF令牌的到期时间并检查现象是否重复。