0

我有一个用 HtmlServices 制作的网页。这个页面有一个表单,我想提交给一个 GAS Web 应用程序,该应用程序作为 Web 服务运行。

当我使用谷歌应用脚​​本 UrlFetch 从我的第一个 GAS 应用程序调用我的网络服务时,我经常会超时。不幸的是,我们无法设置我认为大约 10 秒的 GAS UrlFetch 超时值。10 秒对于 GAS 应用程序复制文件、打开/编辑电子表格和发送电子邮件来说是不够的!

所以我决定在用 HtmlServices 构建的网页中使用 Jquery 并做一个 ajax 发布(因为我可以设置超时值)。(所以我的页面被 Google Caja 清理了)。据说Jquery得到了Caja的支持。

但我注意到 Ajax URL 总是被重写为第一个 Web 应用程序 URL(我想发布到的 url 由 Caja 更改)。在我看来,谷歌的 Caja 正在阻止 Ajax 调用。我在 GAS HtmlService 中找不到有关 Caja / Ajax 帖子限制的任何内容。

您对如何从 GAS Web App 调用 Web 服务有什么建议,而不受 GAS 超时限制?

4

2 回答 2

2

我现在能给出的最好建议是使用 JSONP 而不是 Ajax 进行调用。在这种情况下,您不应该看到超时,它应该可以正常工作。

于 2012-11-05T21:23:35.887 回答
0

几件事

  1. 从部署在 script.google.com 上的 Web 应用程序到部署在 script.google.com 上的内容服务的 AJAX 调用(使用 jQuery 或 vanilla JS)不起作用。我已经确认了这一点,我相信这是一个安全限制。我尝试了几种不同的解决方法,这看起来没有短期选择。

  2. 关于 UrlFetchApp 的服务器端选项。我相信超时实际上是 30 秒。但是,这可能还不够,而且看起来您遇到的频率已经够多了。

所以基本上我推荐的第三个(不太理想的)选项是一种基于“队列”的方法。在这种方法中 - 让您的 HTML Web 应用程序调用 ScriptDb 队列。然后,您可以有一个定时触发器(每分钟或每小时)在您执行必要操作时运行。只需在两个脚本之间共享相同的脚本库,以便您可以共享队列的脚本数据库参考。

于 2012-11-02T22:09:05.417 回答