【问题标题】:Submitting 2 forms at the same time using JavaScript使用 JavaScript 同时提交 2 个表单
【发布时间】:2013-07-06 15:01:10
【问题描述】:

我正在尝试使用 javascript 同时提交 2 个表单。 但是,似乎只打开了第二次提交,而不是第一次。

代码相当简单:

<html>
<body>
<form id="report_0" method="POST" target="_blank" action="https://www.google.com">
   <input type="hidden" name="test1" value="1">
   <input type="submit" value="report_0">
</form>
<form id="report_1" method="POST" target="_blank" action="https://www.google.com">
   <input type="hidden" name="test2" value="2">
   <input type="submit" value="report_1">
</form>
<script>
    document.getElementById("report_0").submit();
    document.getElementById("report_1").submit();
    </script>
</body>
</html>

不能使用 ajax 或等效的,因为它必须是“本机”POST(由于 CORS 问题)

我在某处读到您不能一次提交 2 个表单,这对我来说没有意义。我尝试将目标从“_blank”更改为“form1”和“form2”,但仍然没有。

我们将非常感谢您的帮助 :)

编辑

这是我实际使用的:

for (....) {
       var form = document.createElement("form");
       form.setAttribute("name", "report_"+i);
       form.setAttribute("method", "POST");
       form.setAttribute("target", "_blank");
       form.setAttribute("action", action);

       for (var key in parms) {
           var field = document.createElement("input");
           field.setAttribute("type", "hidden");
           field.setAttribute("name", key);
           field.setAttribute("value", parms[key]);
           form.appendChild(field);
       }
       console.log(form);
       document.body.appendChild(form);
       form.submit();
       document.body.removeChild(form);
}

【问题讨论】:

  • 仅仅因为您想同时提交两个表单并不意味着您可以做到。在 Firefox 和 IE 中添加一个“提交”两个表单“作品”的“提交”按钮。
  • RobG,Chrome 呢?

标签: javascript html forms


【解决方案1】:

你不能这样做这种方式。当一个表单被提交时,整个页面被“销毁”并且表单的响应被加载为一个新页面。

JavaScript 代码运行单线程,所以基本上你会同时在两个表单上触发提交事件,并且只有当你的 JS 完成时,浏览器才会再次接管并尝试执行你给它的任务队列。

因此,如果您想以非 AJAX 方式“正常”提交这两个表单,您必须:

  1. 以某种方式将第二种形式的值存储在客户端(cookie、localstorage 等)
  2. 提交第一个表单,这会导致页面看起来完全一样,只是内容中的某处有some触发器让您的 JS 代码看到第一个表单已经提交。李>
  3. 将值恢复到第二个表单(服务器不知道这些值,因为它们尚未提交)
  4. 提交第二个表单。

【讨论】:

  • 我实际上是在用不同的方式做这件事。
  • ...见上面的编辑。我不能按照你的方式做,因为我无法控制 POST 正在执行的页面。
【解决方案2】:

表单提交是对服务器的同步调用(HttpRequest)。因此,无法提交第二个表格。您期望提交多个表单,而不是异步地依赖另一个表单。所以,像 AJAX 这样的 API 将解决这个问题,但你不是在寻找那个。

如果您的设计允许您在页面中保留多个框架/ iframe,请将这些表单保留在不同的框架/ iframe 中。使用这种方法,您可以从父页面提交多个表单。

如果您能解释一次提交多个表单的要求以及您的限制,您可能会得到更好的答复。

【讨论】:

  • 我希望你的意思是第一种形式..因为这就是行为。仅提交第二个(= 最后一个)
【解决方案3】:

我们可以通过 syn/asyn 两种方式来实现,请参考下面的示例链接......我希望这会对你有所帮助。

http://yogendrakrsingh.blogspot.in/2010/03/javascript-trick-submitting-multiple.html

借助序列化超过第三个隐藏的 mwe 可以实现。已经发过了,请戳下面的链接

Is to possible to submit two forms simultaneously?

【讨论】:

    【解决方案4】:

    这不是最漂亮的方式,但我认为无论如何分享它会很好。我最终通过使用setTimeout 解决了它:

    var requestDelay = 2000;
    document.getElementById("form-a").submit();
    
    setTimeout(function() {
        document.getElementById("form-b").submit();
    }, requestDelay);
    

    这样,它会等到form A可能,估计为 2 秒)已提交,然后提交 form B。您可能需要使用requestDelay 来满足您的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-03
      • 2016-10-19
      • 1970-01-01
      • 2014-10-14
      • 2016-03-21
      • 1970-01-01
      • 2021-06-11
      • 2016-01-04
      相关资源
      最近更新 更多