Отправить Старый Google Form затем перенаправить на другую страницу

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

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

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

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

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

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

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


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