2012-03-16 27 views
8

Korzystam z formularza Google na stronie internetowej. Skopiowałem kod źródłowy z formularza bezpośrednio na moją stronę, dzięki czemu mogę zmodyfikować część kodu HTML zamiast używać elementu iframe. Następnie zamiast zabierać użytkownika na stronę odpowiedzi do Google Docs, chciałbym przekierować go na inną stronę.Prześlij stary formularz Google, a następnie przekieruj na inną stronę

Kłopot, na który napotykam, polega na przekierowaniu strony. Udało mi się dostać to działa prawidłowo w Chrome i Firefox z tym:

<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 i Safari zarówno zrobiłem przekierowanie automatycznie i odpowiedzi nigdy nie napisał do formularza Google. Jeśli zrezygnuję z przekierowania, akcja działa idealnie w obu przypadkach, a odpowiedź jest rejestrowana w arkuszu kalkulacyjnym Google.

Więc próbowałem wyciągnąć działania na zewnątrz i zamiast tego zrobił to wszystko w onSubmit zamiast, tak jak poniżej:

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

sam problem jak poprzednio, IE i Safari zarówno przekierować, a nic nie jest zapisywane do arkusza kalkulacyjnego Google . I znowu, jeśli usunę przekierowanie, odpowiedź zostanie zarejestrowana we wszystkich przeglądarkach. Mogę też robić inne rzeczy, takie jak wrzucenie alertu po akcji i wszystko działa dobrze. Jedyny raz widzę problem z przekierowaniem.

W tym miejscu jedyne, co mogę sobie wyobrazić, to to, że jest to rodzaj konfliktu między przekierowaniem a działaniem. Mam dość ograniczoną znajomość obsługi javascript i formularzy, więc wszelka pomoc lub zalecenia byłyby mile widziane!

Odpowiedz

0

Wygląda na to, że przeglądarki nie wypełniły formularza przed przekazaniem do przekierowania. onsubmit dzieje się przed samym zgłoszeniem, więc nie możesz obsłużyć problemu.

Użyj funkcji "Onload" docelowego elementu iframe dla przekierowania.

ten został poproszony w podobny sposób:

Old Google Form redirect after submission

Przyjrzyj się dobrze na odpowiedź. Funkcja onload elementu iframe obsłuży przekierowanie, więc przekierowanie nastąpi dopiero po zakończeniu przesyłania i otrzymaniu odpowiedzi od google. Tak więc po załadowaniu ukrytej odpowiedzi z google uruchamiamy przekierowanie. Jest to funkcja asynchroniczna między klientem a serwerem. Czekamy, aż serwer obsłuży dane przed przekierowaniem.


Rozszerzony Uwaga: Można spróbować umieścić przekierowanie wewnątrz funkcji setTimeout. Spowoduje to opóźnienie wykonania przekierowania, pozwalając serwerowi najpierw obsłużyć zgłoszenie. Ale setTimeout wymaga ustalonego czasu, więc jeśli obsługa danych nie jest synchroniczna (tj. Asynchroniczna) setTimeout nie zadziała, ponieważ może wystartować wcześniej lub za późno. Asynchroniczna obsługa danych ma zastosowanie, gdy przetwarzanie danych wymaga nieokreślonego czasu (np. Żądania http).

Powiązane problemy