2013-07-09 82 views
5

我正在嘗試使用javascript同時提交2個表單。 但是,似乎只有第二次提交被打開,而不是第一次提交。使用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); 
} 
+3

僅僅因爲你想一次提交兩份表格並不意味着你可以做到。在Firefox和IE中添加一個「同時提交」按鈕,提交這兩個表單「works」。 – RobG

+1

RobG,Chrome呢? – natiz

回答

1

你不能做到這一點方式。提交表單時,整個頁面被「銷燬」,表單的響應作爲新頁面加載。

JavaScript代碼運行單線程,所以基本上你一次觸發兩個表單上的提交事件,只有當你的JS完成後,瀏覽器再次接管並嘗試執行你給它的任務隊列。

所以,如果你想在非AJAX方式提交這兩種形式的「正常」,你必須:在客戶端以某種方式(餅乾,localStorage的第二形式的

  1. 存儲值,你的名字是這樣的)
  2. 提交第一個表單,導致頁面看起來完全一樣,只是在內容的某處有一些觸發你的JS代碼,看到第一個表單已經被提交。
  3. 將值恢復到第二種形式(服務器不知道那些,因爲他們還沒有提交)
  4. 提交第二個表單。
+0

我實際上是用另一種方式來做的。 – natiz

+0

...見上面的編輯。我不能這樣做,因爲我無法控制POST正在進行的頁面。 – natiz

0

表單提交是一個同步調用服務器(HttpRequest)。因此,第二種形式不能提交。您期望提交多個表單而不異步地依賴於另一個表單。所以,像AJAX這樣的API可以解決這個問題,但是你並沒有在尋找。

如果您的設計允許您在頁面中保留多個幀/ iframe,請將這些表單保存在不同的幀/ iframe中。通過這種方法,您可以從父頁面提交多個表單。

如果您可以解釋一次提交多個表單的要求以及您的限制,則可能會得到更好的回覆。

+0

我希望你指的是第一個形式..因爲這是行爲。只有第二個提交(=最後一個) – natiz

3

沒有這樣做的最漂亮的方式,但我認爲這將是很好反正分享。我結束了使用setTimeout解決它:

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

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

這樣,一直等到form A可能,2秒的估計)已經提交,然後提交form B。您可能需要使用requestDelay來適應您的需求。

相關問題