【问题标题】:Why would a Google Forms "on form submit" trigger occasionally pass an empty event to the function that runs in response?为什么 Google 表单“提交表单”触发器偶尔会向响应运行的函数传递一个空事件?
【发布时间】:2019-11-14 11:31:37
【问题描述】:

我正在使用 Google 表单,并且我有一个“提交表单”触发器,它运行一个接受事件 e 的函数。我在函数内部使用e.namedValues 访问提交的表单值。大多数时候一切正常,但偶尔e.namedValues 为空,或者至少所有值都是空的,并且发送的通知电子邮件缺少信息。我知道这不是因为提交了空表单,因为大多数值都是必需的,并且这些空白电子邮件对应于插入到 Google 电子表格中的有效表单提交。有什么原因我有时无法访问该函数中提交的表单值?

【问题讨论】:

  • 我们最近看到了类似的行为,通常我们发现防止这些触发器影响您的代码的方法不是在函数内部使用 if(e.values && !e.values[1])return; 之类的东西来阻止它们。通常,有问题的触发器只发送时间戳。
  • 您可以阅读更多关于他们的信息here
  • @Cooper 太好了,谢谢。您的意思是“阻止他们”而不是“不阻止他们”,对吗?
  • 是的。我发现我的手指常常无法传达我大脑想要传达的信息。

标签: google-apps-script


【解决方案1】:

这似乎是最近的应用程序脚本bug,其中触发器在没有有效数据的情况下多次错误触发,但 Stack Overflow 用户J.G.Cooper 提供了有用的workaround:检查所需问题的值.因此,只需在开头包含if (e.values && !e.values[1]) { return; },它应该可以防止额外的执行。

请记住,e.values[1] 假设表单中的相关问题是必填。如果不需要该问题,并且提交的响应没有回答该问题,那么您的脚本将过早退出。因此,根据需要更改该索引以匹配您的表单。

function onFormSubmit(e) {
  // Reject spurious triggers by checking the value of a required question.
  // In this case, we assume  e.value[1] is required.
  if (e.values && !e.values[1]) { return; }

  // Otherwise, do your thing
}

【讨论】:

  • 太棒了。所以我想我们很确定触发器也会使用正确的数据触发?只要我只是获得额外的执行而不是没有数据的单次执行,这个解决方案就很棒。
  • @regularmike 是的。如果您查看 Cooper 的答案(上面他和我都引用过),您会发现额外的处决并非完全空白。 e.values 返回类似 [timestamp, "", "", ""] 的 3 问题表单。这就是您要检查所需问题是否为空白的原因,因为它在响应中可能为空白的唯一方法是它是否是虚假触发器。
  • 是的,听起来就是这样,只是想确认除了额外的执行之外,它总是做正确的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
相关资源
最近更新 更多