【问题标题】:Prevent sending duplicate data using GET防止使用 GET 发送重复数据
【发布时间】:2014-07-22 12:13:45
【问题描述】:

我构建了一个自定义表单,它使用 GET 方法通过一个简单的 Google 脚本将其所有数据发送到 Google 电子表格。 提交表单后,我会显示一个感谢页面,该页面托管在 GS 上并通过 HtmlService 调用。 此页面的 URL 包含表单的所有值,如果我刷新感谢页面,我的电子表格上会出现重复的数据,这是一场灾难。

我尝试了不同的方法来设置计时器以在 5 秒后重定向到不同的页面,但没有成功。有东西阻止了我的脚本。 (我知道它正在工作,因为我可以显示警报,但不能自动重定向页面)。

是否有任何选项可以防止将重复数据发送到电子表格?我不在乎它是否为感谢页面设置了超时(这应该相对容易),或者为每次提交使用唯一的令牌。

谢谢。

【问题讨论】:

  • 那么,所有的表单数据都被发送到“谢谢”页面了吗? “谢谢”页面中有表格吗?
  • 所有数据都通过 GET 发送到电子表格。感谢页面只是一个简单的 HTML,带有“感谢提交!。返回-->”
  • 你能显示打开“谢谢”页面的代码吗?
  • 我在 gs 上有一个名为ThankYou.html 的 html 文件,我将其中一个值传递给它(这是 gs 文档的最后一个示例):ˋvar ty = HtmlService.createTemplateFromFile('ThankYou') ; ty.lv = 最后一个值; return ty.evaluate();ˋ
  • 让感谢页面在 5 秒后自动重定向到另一个页面对我来说会更好。那简直就是一块石头打死两只鸟。有什么想法吗?

标签: google-apps-script


【解决方案1】:

实际的问题是您有一个 html 页面,该页面通过让用户单击链接或重定向来向 gas 提交数据。相反,您需要使用 ajax get 调用 gas,然后您的 html(不是 gas)会显示感谢页面。

【讨论】:

  • 谢谢,我没有考虑过这个选项。它需要我更改代码的某些部分,所以我会先看看其他选项是否适合我,如果不适合,那么这是一个 100% 的解决方案。
【解决方案2】:

这样的数据应该通过 POST 而不是 GET 发送。

尝试在您发布的脚本中使用 doPost(e) 而不是 doGet() 并将数据发布到它。

【讨论】:

  • 你知道doPost() 的文档在哪里吗?在HtmlService Forms 部分,该示例使用google.script.run 将信息传递给服务器——这是使用POST 的理想场所。
  • 我尝试切换到 doPost(e) 和 ˋ
    ˋ 上的 method="post",但是,刷新感谢页面仍然会创建重复数据。
  • 在这种情况下发布或获取没有区别
【解决方案3】:

如果刷新“谢谢”页面再次将数据发送到您的电子表格,并且谢谢

页面的 URL 包含表单的所有值

,然后您以某种方式将 GET 请求和感谢页面的服务结合在一起。那需要分开。您需要在不将表单的值放入 URL 的情况下提供感谢页面。即使感谢页面中没有任何数据,也没有表单,如果 URL 正在触发另一个请求,那么数据将重新发送。

【讨论】:

  • 这是我的感谢页面:ˋ
    谢谢,= lv; ?>!
    ˋ
  • 好的,您希望页面在同一窗口中导航回来。 taget="_self" 是默认值,所以我认为不需要。您有一个 <?= lv; ?>! 的小脚本。我认为那条线是完全错误的。它应该类似于:<?!= lv(); ?>,其中lv.gs 代码函数的名称。如果末尾有感叹号,那就错了。使用 Firebug 或 Google 开发人员工具等工具查看浏览器控制台窗口中的错误消息。格式不正确的 HTML 可能会导致问题。在 Chrome 中,查找工具、开发者工具,然后是控制台窗口。
  • 这是我从 .gs 脚本中传下来的一个变量,它工作得很好。您可以查看 Google 上的文档
猜你喜欢
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 2012-03-03
  • 2012-12-08
  • 2015-09-11
相关资源
最近更新 更多