2012-03-16 2 views
8

Я использую форму Google на веб-странице. Я скопировал исходный код из формы непосредственно на мою страницу, чтобы я мог модифицировать часть HTML вместо использования iframe. Затем вместо того, чтобы перевести пользователя на страницу ответов с документами Google, я бы перенаправил их на другую страницу.Отправить Old Google Form затем перенаправить на другую страницу

Проблема, с которой я сталкиваюсь, связана с перенастройкой страницы. Я был в состоянии получить эту работу должным образом в 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. Если я удаляю перенаправление, действие отлично работает в обоих случаях, и ответ записывается в электронную таблицу 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, как перенаправление, и ничего не записывается в таблицу Google , И еще раз, если я удалю перенаправление, ответ будет записан во всех браузерах. Я также могу делать другие вещи, например, бросать предупреждение после действия, и все продолжает работать нормально. Единственный раз, когда я вижу проблему, - это перенаправление.

Таким образом, на этом этапе я могу только понять, что это своего рода конфликт между перенаправлением и действием. У меня довольно ограниченные рабочие знания javascript и форм, поэтому любая помощь или рекомендации были бы очень признательны!

ответ

0

Звучит так, что браузеры не заполняют форму перед обработкой перенаправления. onsubmit происходит до самого представления, поэтому вы не можете справиться с этой проблемой.

Используйте функцию onload для целевого iframe для перенаправления.

Это было предложено аналогичным образом:

Old Google Form redirect after submission

Всмотритесь в ответ. Функция onload iframe будет обрабатывать перенаправление, поэтому перенаправление не произойдет до тех пор, пока представление не будет завершено, и ответ будет отправлен из Google. Поэтому, когда скрытый ответ от google загружен, мы запускаем перенаправление. Это асинхронная функциональность между клиентом и сервером. Мы ожидаем, что сервер обработает данные перед перенаправлением.


Расширенная Примечание: Вы можете попробовать поставить переадресацию в пределах функции SetTimeout. Это задерживает выполнение перенаправления, позволяя серверу сначала обрабатывать заявку. Но setTimeout требует фиксированного количества времени, поэтому, если обработка данных не является синхронной (т. Е. Асинхронной), setTimeout не будет работать, поскольку она может срабатывать раньше или слишком поздно. Асинхронная обработка данных применяется, когда для обработки данных требуется неопределенный промежуток времени (например, HTTP-запросы).

Смежные вопросы