提交旧的Google表单然后重定向到另一个页面

时间:2012-03-16 05:26:08

标签: javascript html google-sheets google-form

我在网页上使用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 :(得分:0)

听起来好像浏览器在处理重定向之前没有完成表单提交。 onsubmit在提交之前发生,所以你无法处理那里的问题。

使用目标iframe的onload函数进行重定向。

这是以类似的方式提出的:

Old Google Form redirect after submission

仔细看看答案。 iframe的onload函数将处理重定向,因此重定向不会发生,直到提交完成并且已经从google发出响应。因此,当加载谷歌的隐藏响应时,我们会启动重定向。这是客户端和服务器之间的异步功能。我们正在等待服务器在重定向之前处理数据。


扩展说明:您可以尝试将重定向放在setTimeout函数中。这将延迟重定向的执行,允许服务器首先处理提交。但是setTimeout需要一段固定的时间,因此如果数据处理不是同步的(即异步),则setTimeout将无法工作,因为它可能会触发到早期或者太晚。当数据处理需要不确定的时间量(例如http请求)时,异步数据处理适用。