我有一个用HtmlServices制作的网页。 此页面包含一个我想要提交给GAS Web应用程序的表单,该应用程序可用作Web服务。
当我使用谷歌应用脚本UrlFetch从我的第一个GAS应用程序调用我的Web服务时,我经常会超时。不幸的是我们无法设置GAS UrlFetch超时值,我认为这个值大约是10s。 10秒不足以让GAS应用复制文件,打开/编辑电子表格并发送电子邮件!
所以我决定使用Jquery并在我用HtmlServices构建的网页中做一个ajax帖子(因为我可以设置超时值)。 (所以我的页面由Google Caja清理)。据说Jquery得到了Caja的支持。
但是我注意到Ajax URL总是被重写为第一个Web应用程序URL(我要发布的网址由Caja改为我改变)。在我看来,Google的Caja正在阻止Ajax通话。 我在GAS HtmlService中找不到关于Caja / Ajax帖子限制的任何内容。
您是否有关于如何从GAS Web App调用Web服务的建议,而不受GAS超时限制?
答案 0 :(得分:2)
我现在可以给出的最佳建议是使用JSONP而不是Ajax来进行调用。在这种情况下你不应该看到超时,它应该可以正常工作。
答案 1 :(得分:0)
一些事情
从script.google.com上部署的网络应用程序到script.google.com上部署的内容服务的AJAX调用(使用jQuery或vanilla JS)不起作用。我已经证实这一点,我相信这是一个安全限制。我尝试了一些不同的解决方法,看起来没有短期选项。
关于UrlFetchApp的服务器端选项。我相信超时实际上是30秒。但是,这可能仍然不够,看起来你经常遇到问题。
所以基本上我推荐的第三种(不太理想的)选项是基于“队列”的方法。在这种方法中 - 让您的HTML Web应用程序调用ScriptDb队列。然后,您可以使用定时触发器(每分钟或每小时)来执行必要的操作。只需在两个脚本之间共享相同的脚本库,以便共享队列的脚本数据库引用。