str*_*ato 12 html javascript google-sheets google-forms
我在网页上使用Google表单.我将表单中的源代码直接复制到我的页面上,这样我就可以修改一些HTML而不是使用iframe.然后,我不想将用户带到google docs响应页面,而是将其重定向到另一个页面.
我遇到的麻烦是页面重定向.我能够通过以下方式在Chrome和Firefox中正常运行:
<form target="GoogleResponse" action="https://docs.google.com/spreadsheet/
formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&ifq;" onsubmit="
window.location = 'targetPage.html';" method="POST" id="ss-form">
Run Code Online (Sandbox Code Playgroud)
IE和Safari都自动进行重定向,并且响应从未写入Google表单.如果我放弃重定向,则该操作在两者中都能完美运行,并且响应会记录在Google电子表格中.
所以我试图将操作拉出来,而不是在onsubmit中完成所有操作,就像这样:
<form target="GoogleResponse" onsubmit="this.action = https://docs.google.com
/spreadsheet/formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&ifq';
window.location = 'targetPage.html';" method="POST" id="ss-form">
Run Code Online (Sandbox Code Playgroud)
与以前相同的问题,IE和Safari都重定向,并且没有任何内容写入Google电子表格.再次,如果我删除重定向,响应将记录在所有浏览器中.我还可以做其他事情,比如在行动后投入警报,一切都继续正常.我唯一看到问题的方法是重定向.
所以在这一点上我唯一可以想到的是,它们是重定向和动作之间的某种冲突.我对javascript和表单的工作知识非常有限,所以任何帮助或建议将不胜感激!
小智 1
听起来浏览器在处理重定向之前尚未完成表单提交。onsubmit 发生在提交本身之前,因此您无法在那里处理问题。
使用目标 iframe 的 onload 函数进行重定向。
已经以类似的方式提出了这个问题:
好好看看答案。iframe 的 onload 函数将处理重定向,因此在提交完成并且 google 给出响应之前,重定向不会发生。因此,当加载来自谷歌的隐藏响应时,我们会触发重定向。这是客户端和服务器之间的异步功能。我们正在等待服务器在重定向之前处理数据。
扩展说明:您可以尝试将重定向放在 setTimeout 函数中。这将延迟重定向的执行,从而允许服务器首先处理提交。但是 setTimeout 需要固定的时间,因此如果数据处理不是同步的(即异步),setTimeout 将不起作用,因为它可能触发得太早或太晚。当数据处理需要不确定的时间(例如http请求)时,适用异步数据处理。
| 归档时间: |
|
| 查看次数: |
9017 次 |
| 最近记录: |