2012-03-16 108 views
8

我正在網頁上使用Google表單。我將表單中的源代碼直接複製到我的頁面上,以便我可以修改某些HTML而不是使用iframe。然後,而不是讓用戶訪問谷歌文檔響應頁面,我想重定向到另一個頁面。提交舊的Google表單,然後重定向到另一頁

我遇到的麻煩是頁面重定向。我能得到這個工作正常在Chrome和Firefox這一點:

<form target="GoogleResponse" action="https://docs.google.com/spreadsheet/ 
formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&amp;ifq;" onsubmit=" 
window.location = 'targetPage.html';" method="POST" id="ss-form"> 

IE和Safari都沒有自動重定向和響應從來沒有得到書面的形式谷歌。如果我放棄重定向,則該操作在兩者中都完美起作用,並且響應會記錄在Google電子表格中。

所以我試圖拉出的動作,而是做到了一切的onsubmit代替,就像這樣:

<form target="GoogleResponse" onsubmit="this.action = https://docs.google.com 
/spreadsheet/formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&amp;ifq'; 
window.location = 'targetPage.html';" method="POST" id="ss-form"> 

同樣的問題和以前一樣,IE和Safari都重定向,並且沒有數據被寫入到谷歌電子表格。再次,如果我刪除重定向,則會在所有瀏覽器中記錄響應。我也可以做其他的事情,比如在行動後拋出警報,並且一切都繼續正常工作。我唯一一次看到問題是重定向。

所以在這一點上,我唯一能想到的就是它們是重定向和動作之間的某種衝突。我對JavaScript和表單的工作知識相當有限,所以任何幫助或建議都將不勝感激!

回答

0

聽起來像瀏覽器在處理重定向之前還沒有完成表單提交。 onsubmit在提交之前發生,所以你不能在那裏處理問題。

使用目標iframe的onload函數進行重定向。

這已被要求以類似的方式:

Old Google Form redirect after submission

採取在回答一個很好看。 iframe的onload函數將處理重定向,因此重定向不會發生,直到提交完成並且已從google提供響應。所以當來自谷歌的隱藏響應被加載時,我們激發一個重定向。這是客戶端和服務器之間的異步功能。我們正在等待服務器在重定向之前處理數據。


extended注意:你可以嘗試把重定向一個setTimeout函數內。這會延遲執行重定向,允許服務器首先處理提交。但setTimeout需要一段固定的時間,所以如果數據處理不同步(即異步),setTimeout將不起作用,因爲它可能會提前或延遲。異步數據處理適用於數據處理需要不確定的時間量(如http請求)的情況。