gpt4 book ai didi

google-apps-script - 从 Google Web App 中的 doPost() 重定向,带有 App 脚本的 HTML 表单

转载 作者:行者123 更新时间:2023-12-03 19:15:46 31 4
gpt4 key购买 nike

假设我有一个包含各种输入的 HTML 文件。根据这些输入,我想发送一封电子邮件,然后显示感谢信息或重定向到感谢页面。

我正在 doGet() 中加载 index.html 文件,如下所示:

function doGet(){
var template = HtmlService.createTemplateFromFile('index');
template.action = ScriptApp.getService().getUrl();
return template.evaluate();
}

在 doPost(e) 函数中添加我需要的实现后,将代码部署到 Web 应用程序中,填写表单并提交后,除了最后一点之外,一切似乎都运行良好。我想显示输出消息或重定向到感谢页面,或者类似的东西,但我看到的只是一个空白页面,那里本来是 HTML 表单。

我试过了:
function doPost(e) {
//all logic
return ContentService.createTextOutput("Thank you");
}

和..
function doPost(e) {
//all logic
return ContentService.createTextOutput(JSON.stringify(e.parameter));
}

和..
function doPost(e) {
//all logic
var htmlBody = "<h1>Thank you.</h1>";
return HtmlService.createHtmlOutput(htmlBody);
}

和..
function doPost(e) {
//all logic
var template = HtmlService.createTemplateFromFile('Thanks');
return template.evaluate();
}

在所有列出的情况下,HTML 表单似乎都消失了,我只能看到一个空白屏幕。

有任何想法吗?

最佳答案

在 GAS 中,通过 Web 应用程序发送 POST 请求并不像看起来那么简单。继续尝试一个小实验:将以下 JS 代码添加到由 doGet() 函数提供的 HTML 页面,就在 结束标记之前:

... 
<script>
console.log(window.location);
</script>
</body>

在控制台中检查输出时,您可能会得到如下信息:

enter image description here

问题在于以“/exec”结尾的网络应用程序 URL 实际上并未链接到 self.拉特纳 googleusercontent.com link 是您在打开链接和表单时将被重定向到的 URL。但是,为了使表单提交工作,POST 请求应该发送到您的网络应用程序的“已发布”URL(以“/exec”结尾的那个)。

因此,您必须通过实现自己的路由来覆盖默认值。有很多方法可以实现这一结果 - 这是最简单的一种:
    <form method="post" action="<?!= ScriptApp.getService().getUrl() ?>">
<input type="submit" value="submit">
</form>

如果您对 表示法不熟悉,请查看 GAS 中有关 scriptlet 和 HTML 模板的部分 https://developers.google.com/apps-script/guides/html/templates

基本上,在将原始 HTML 发送到浏览器进行渲染之前,Web 应用程序 URL 会被强制打印到模板中。这可确保您在“提交”事件发生时点击正确的 URL。

关于google-apps-script - 从 Google Web App 中的 doPost() 重定向,带有 App 脚本的 HTML 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922365/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com