2012-03-16 25 views
8

Sto utilizzando un modulo di Google su una pagina web. Ho copiato il codice sorgente dal modulo direttamente sulla mia pagina in modo da poter modificare parte dell'HTML anziché utilizzare un iframe. Quindi, invece di portare l'utente alla pagina di risposta di Google Documenti, vorrei reindirli a un'altra pagina.Invia Vecchio modulo Google quindi reindirizzare a un'altra pagina

Il problema che sto funzionando in è con la pagina di reindirizzamento. Sono stato in grado di ottenere questo funziona correttamente in Chrome e Firefox con questo:

<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 e Safari sia fatto il reindirizzamento automatico e la risposta non ha mai avuto scritto al form di Google. Se cancello il reindirizzamento, l'azione funziona perfettamente in entrambi e la risposta viene registrata nel foglio di lavoro Google.

Così ho tentato di tirare l'azione fuori e invece lo ha fatto tutto in onsubmit, invece, in questo modo:

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

stesso problema di prima, IE e Safari sia redirect, e nulla è scritto al foglio di calcolo di Google . E ancora una volta, se rimuovo il reindirizzamento, la risposta viene registrata in tutti i browser. Posso anche fare altre cose come lanciare un avviso dopo l'azione, e tutto continua a funzionare bene. L'unica volta che vedo il problema è con il reindirizzamento.

Quindi a questo punto l'unica cosa che posso immaginare è che la loro è una sorta di conflitto tra il reindirizzamento e l'azione. Ho una conoscenza limitata di javascript e moduli, quindi qualsiasi aiuto o consiglio sarebbe molto apprezzato!

risposta

0

Suona come i browser non hanno completare l'invio del modulo prima di maneggiare il reindirizzamento. onsubmit accade prima dell'invio stesso così non puoi gestire il problema lì.

utilizzare la funzione onload del iframe obiettivo per il reindirizzamento.

questo è stato chiesto in maniera simile:

Old Google Form redirect after submission

dare una buona occhiata alla risposta. La funzione onload del iframe gestirà il redirect, in modo che il reindirizzamento non accadrà fino a quando la presentazione è completa e una risposta è stata data da google. Quindi, quando viene caricata la risposta nascosta da Google, viene generato un reindirizzamento. Questa è la funzionalità asincrona tra client e server. Stiamo aspettando che il server gestisca i dati prima del reindirizzamento.


nota esteso: Si potrebbe provare a mettere il reindirizzamento all'interno di una funzione setTimeout. Ciò ritarderebbe l'esecuzione del reindirizzamento, consentendo al server di gestire prima l'invio. Ma setTimeout richiede una quantità di tempo fissa, quindi se la gestione dei dati non è sincrona (cioè asincrona) setTimeout non funzionerà in quanto potrebbe sparare prima o tardi. La gestione asincrona dei dati si applica quando l'elaborazione dei dati richiede un lasso di tempo indeterminato (come le richieste HTTP).

Problemi correlati