Javascript HTML表单并不总是提交
我有一个HTML表单,有时提交,有时不提交。表单使用一个按钮提交,该按钮使用javascript验证表单,然后也使用javascript提交表单,如下所示: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
<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。但是,根据默认行为重新加载页面的速度(或者验证的速度)的不同,javascriptsubmit
可能会被点击,也可能不会被点击 从我的角度来看,您正在使用CSRF令牌。CSRF令牌的过期时间取决于您使用的框架/CMS。这几乎是可配置的
现在发生的是,当CSRF令牌过期时,服务器拒绝输入。这可能是你的情况。要检查此问题,请保持表单打开并在长时间后提交。如果同一问题再次出现,请使用以下解决方案,否则情况就不是这样了
一个简单的解决方案是增加CSRF令牌的过期时间,并检查现象是否重复。验证表单的内部可能很重要,你能分享完整的功能吗?检查你浏览器中的调试控制台。@Whymarrh我这里有完整的未简化版本:pastebin.com/zG0zWLJc@BenRowe不幸的是,我没有看到任何东西。@PavSidhu请将其添加到原始问题中(并尽可能将其简化为一个最小的示例)