Отправьте старую форму Google и перенаправьте на другую страницу - PullRequest
10 голосов
/ 16 марта 2012

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

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

1 Ответ

0 голосов
/ 28 марта 2012

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

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

Это было задано вАналогичным образом:

Старая форма Google перенаправления после отправки

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


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

...