2012-03-16 25 views
8

Web sayfasından bir Google Formu kullanıyorum. Bir iframe kullanmak yerine HTML'nin bir kısmını değiştirebilmek için kaynak kodu formdan doğrudan sayfama kopyaladım. Ardından, kullanıcıyı google dokümanlar yanıt sayfasına götürmek yerine, onları başka bir sayfaya yönlendirmek istiyorum.Eski Google Formunu gönderin ve başka bir sayfaya yönlendirin

Karşılaştığım sorun sayfa yönlendirmesidir. Bunun bununla Chrome ve Firefox'ta düzgün çalışıyor elde edebilir:

<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 ve Safari hem otomatik yönlendirme yaptığını ve tepki Google Formu için yazılı var olmadı. Yönlendirmeyi bırakırsam, eylem her ikiside mükemmel çalışır ve yanıt Google e-tablosuna kaydedilir. Google e-tablosuna yazılır

<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"> 

Aynı sorun daha önce olduğu gibi, IE ve Safari hem yönlendirme ve hiçbir şey:

Bu yüzden yerine onsubmit her şey, şöyle yaptım yerine dışarı harekete çekmeye teşebbüs ve . Ve bir kez daha, yönlendirmeyi kaldırırsam, yanıt tüm tarayıcılarda kaydedilir. Ayrıca eylemden sonra bir uyarıya atmak gibi başka şeyler de yapabilirim ve her şey yolunda gitmeye devam ediyor. Sorunu gördüğüm tek zaman yönlendirme ile.

Bu noktada, anlayabildiğim tek şey, onların yönlendirme ve eylem arasında bir tür çatışmanın olmasıdır. Javascript ve formlarla ilgili oldukça sınırlı bir çalışma bilgim var, bu sayede herhangi bir yardım ya da öneri çok takdir edilecek!

cevap

0

Tarayıcılar, yönlendirmeyi işlemeye başlamadan önce form gönderimini tamamlamadıklarını gösterir. Gönderim gönderilmeden önce gerçekleşir, böylece sorunu halledemezsiniz.

Yönlendirme için hedef iframe öğesinin yükleme işlevini kullanın.

Bu benzer şekilde istendi:

Old Google Form redirect after submission

cevabı iyi bak. Iframe öğesinin yükleme işlevi yönlendirmeyi işleyecektir, bu nedenle gönderme işlemi tamamlanana ve google'dan bir yanıt verilinceye kadar yönlendirme gerçekleşmeyecektir. Dolayısıyla google'dan gizli yanıt yüklendiğinde, bir yönlendirme başlatırız. Bu, istemci ve sunucu arasındaki async işlevidir. Sunucuyu yönlendirmeden önce verileri işlemek için bekliyoruz.


Genişletilmiş not: Bir setTimeout fonksiyonu içinde yönlendirmeyi koyarak deneyebilirsiniz. Bu, yönlendirmenin yürütülmesini geciktirecek ve sunucunun ilk gönderimi işlemesine izin verecektir. Ancak setTimeout sabit bir süre gerektirir, bu nedenle veri işleme senkronize değilse (yani, senkronize olmayan) setTimeout, erken veya çok geç olarak ateşleyebileceği için çalışmaz. Eş zamanlı olmayan veri işleme, veri işleme belirsiz bir süre gerektirdiğinde (http istekleri gibi) geçerlidir.