5

JavaScriptを使用して、同時に2つのフォームを送信しようとしています。ただし、最初の送信ではなく、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>

「ネイティブ」POSTでなければならないため、ajaxまたは同等のものを使用できません(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);
}
4

4 に答える 4

3

それを行う最も美しい方法ではありませんが、とにかくそれを共有するのはいいことだと思いました. 私はそれを使用して解決しましたsetTimeout

var requestDelay = 2000;
document.getElementById("form-a").submit();

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

form Aこのようにして、 (おそらく2 秒の見積もりで) が送信されるまで待機してから、送信しform Bます。ニーズに合わせて をいじる必要があるかもしれませんrequestDelay

于 2016-01-06T10:20:59.027 に答える
1

このようにすることはできません。フォームが送信されると、ページ全体が「破棄」され、フォームの応答が新しいページとして読み込まれます。

JavaScript コードはシングルスレッドで実行されるため、基本的には一度に 2 つのフォームで送信イベントをトリガーし、JS が完了すると、ブラウザーが再び引き継ぎ、指定したタスク キューを実行しようとします。

したがって、AJAX 以外の方法で「通常どおり」両方のフォームを送信する場合は、次のようにする必要があります。

  1. 2 番目のフォームの値を何らかの方法でクライアントに保存します (cookie、localstorage、名前を付けます)。
  2. 最初のフォームを送信すると、まったく同じように見えるページが表示されますが、コンテンツのどこかに、最初のフォームが既に送信されたことを確認するための JS コードのトリガーがあります
  3. 値を 2 番目のフォームに復元します (送信されていないため、サーバーは値を認識しません)。
  4. 2 番目のフォームを送信します。
于 2013-07-09T05:59:46.773 に答える
0

フォーム送信は、サーバーへの同期呼び出し (HttpRequest) です。したがって、2 番目のフォームを送信することはできません。他のフォームに非同期的に依存することなく、複数のフォームを送信することを期待しています。したがって、AJAX のような API は問題を解決しますが、それを探しているわけではありません。

ページに複数のフレーム/iframe を保持できるデザインの場合は、それらのフォームを異なるフレーム/iframe に保持します。このアプローチでは、親ページから複数のフォームを送信できます。

一度に複数のフォームを送信するための要件と制限を説明できれば、より適切な回答が得られる可能性があります。

于 2013-07-09T06:00:45.397 に答える
0

syn/asyn の両方の方法で実現できます。以下のサンプル例のリンクを参照してください....これがお役に立てば幸いです。

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

また

mwe が達成できる 3 分の 1 以上の非表示のシリアル化の助けを借りて。これはすでに投稿されています。リンクの下にお願いします

2つのフォームを同時に送信することはできますか?

于 2013-07-09T06:07:52.717 に答える