Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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 HTML表单并不总是提交_Javascript_Html_Forms - Fatal编程技术网

Javascript HTML表单并不总是提交

Javascript HTML表单并不总是提交,javascript,html,forms,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="v

我有一个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>

函数validateForm(){
//在此处验证规则
document.forms['my-form'].submit();
}
这很直截了当。然后将数据发送到服务器,检查csrf令牌,然后将输入保存到数据库中。我正在试图理解为什么表格没有一直提交。有时,当我单击submit按钮时,页面只是重新加载,而当其他时候表单保存到数据库时,数据就消失了,我被重定向到下一个页面

根据我的猜测,我相信这可能与过期有关。如果启动表单并将其保留太长时间,则不会提交。每次我马上提交表格,它就会提交。然而,有时当我离开的形式太长,它确实提交

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

解决方案:
type=“button”
属性添加到您的
。这将阻止表单将您的按钮视为
submit
按钮

说明:

“有时它起作用”通常意味着你有比赛条件。您的竞争条件介于JavaScript和默认浏览器行为之间。
的默认
类型
属性是
提交
。示例代码中的表单没有
操作
方法
属性。在这些条件下,表单的默认行为将是在单击按钮时对当前url执行
GET
。单击按钮也将运行javascript。但是,根据默认行为重新加载页面的速度(或者验证的速度)的不同,javascript
submit
可能会被点击,也可能不会被点击

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

现在发生的是,当CSRF令牌过期时,服务器拒绝输入。这可能是你的情况。要检查此问题,请保持表单打开并在长时间后提交。如果同一问题再次出现,请使用以下解决方案,否则情况就不是这样了


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

验证表单的内部可能很重要,你能分享完整的功能吗?检查你浏览器中的调试控制台。@Whymarrh我这里有完整的未简化版本:pastebin.com/zG0zWLJc@BenRowe不幸的是,我没有看到任何东西。@PavSidhu请将其添加到原始问题中(并尽可能将其简化为一个最小的示例)