2012-03-16 22 views
8

Estoy utilizando un formulario de Google en una página web. Copié el código fuente del formulario directamente en mi página para poder modificar parte del HTML en lugar de usar un iframe. Entonces, en lugar de llevar al usuario a la página de respuestas de Google Docs, me gustaría redirigirlas a otra página.Enviar formulario de Google anterior y luego redirigir a otra página

El problema que me estoy encontrando es con la redirección de página. Yo era capaz de obtener esta funcionando correctamente en Chrome y Firefox con esto:

<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 y Safari tanto hice la redirección automática y la respuesta nunca me escriben en el Formulario de Google. Si elimino el redireccionamiento, la acción funciona perfectamente en ambos y la respuesta se registra en la hoja de cálculo de Google.

Así que trató de tirar de la acción y en su lugar lo hizo todo en onsubmit lugar, así:

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

mismo problema que antes, IE y Safari tanto redireccionamiento, y nada se escribe en la hoja de cálculo de Google . Y una vez más, si elimino el redireccionamiento, la respuesta se registra en todos los navegadores. También puedo hacer otras cosas, como lanzar una alerta después de la acción, y todo continúa funcionando bien. La única vez que veo el problema es con la redirección.

Por lo tanto, en este momento lo único que puedo entender es que hay algún tipo de conflicto entre la redirección y la acción. Tengo un conocimiento bastante limitado de JavaScript y formularios, por lo que cualquier ayuda o recomendación sería muy apreciada.

Respuesta

0

Parece que los navegadores no han completado el envío del formulario antes de manejar la redirección. el envío de datos ocurre antes de la presentación, por lo que no puedes manejar el problema allí.

Utilice la función de carga del iframe objetivo para la redirección.

esto se ha preguntado de manera similar:

Old Google Form redirect after submission

tomar un buen vistazo a la respuesta. La función de carga del iframe manejará la redirección, por lo que la redirección no se realizará hasta que se complete el envío y se haya recibido una respuesta de Google. Entonces, cuando se carga la respuesta oculta de google, activamos una redirección. Esta es la funcionalidad asincrónica entre el cliente y el servidor. Estamos esperando que el servidor maneje los datos antes de redirigirlos.


nota extendida: Usted podría intentar poner la redirección dentro de una función setTimeout. Esto retrasaría la ejecución del redireccionamiento, permitiendo que el servidor maneje el envío primero. Pero setTimeout requiere una cantidad fija de tiempo, por lo que si el manejo de datos no es síncrono (es decir, asíncrono) setTimeout no funcionará, ya que puede dispararse temprano o demasiado tarde. El manejo de datos asíncronos se aplica cuando el procesamiento de datos requiere una cantidad de tiempo indeterminada (como solicitudes http).

Cuestiones relacionadas