【问题标题】:Issue trying to have an Ajax Post within Google App Script HTMLService (Caja interference?)尝试在 Google App Script HTMLService 中发布 Ajax 帖子时出现问题(Caja 干扰?)
【发布时间】:2012-11-02 18:10:00
【问题描述】:

我有一个使用 HtmlServices 制作的网页。 这个页面有一个表单,我想提交给一个 GAS 网络应用程序,该应用程序被设计成一个网络服务。

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

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

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

您对如何在不受 GAS 超时限制的情况下从 GAS Web 应用调用 Web 服务有什么建议吗?

【问题讨论】:

  • 澄清一下 - 你有一个基于 Apps Script 的网络应用程序和一个基于 Apps Script 的服务。您想让 Web 应用程序向服务提交数据吗?听起来对吗?
  • 是的,这是有充分理由的,因为两者没有在同一组共享权限上运行!一个以访问页面的用户身份运行,另一个以我的身份运行并为我做事。
  • 我从未尝试过这个,但它确实是一个很好的用法。你试过普通的javascript吗? jQuery 和 Apps Script 最近表现不佳。有一个 AJAX 示例 here.

标签: google-apps-script google-caja


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    几件事

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

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

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

    【讨论】:

    • 由于我们要进入解决方法路径,我使用的一种方法是创建一个 Google 表单并设置一个脚本以运行 onFormSubmit 和外部脚本通过提交表单来“调用”另一个(可能带有参数)。由于这两个脚本都是你的,表单可以通过访问它的 scriptdb(作为一个库)并写入它来“回答”原始表单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2012-08-08
    相关资源
    最近更新 更多