在 Apps 脚本中处理 POST 请求后重定向
Redirect after processing a POST request in Apps Script
我在将 google 脚本页面重定向回我的自定义 URL 时遇到了问题。该脚本当前正在执行,但我无法让它在完成执行后重定向回其前一页。
这是 script.gs 代码:
function doPost(e) {
try {
Logger.log(e); // the Google Script version of console.log see: Class Logger
record_data(e);
// shorter name for form data
var mailData = e.parameters;
var name= String(mailData.name);
var message= String(mailData.message);
var email= String(mailData.email);
var all= ("Name: "+name+"\nReply address: "+email+"\nMessage: "+message);
// determine recepient of the email
// if you have your email uncommented above, it uses that `TO_ADDRESS`
// otherwise, it defaults to the email provided by the form's data attribute
var sendEmailTo = (typeof TO_ADDRESS !== "undefined") ? TO_ADDRESS : mailData.formGoogleSendEmail;
MailApp.sendEmail({
to: String(sendEmailTo),
subject: String(mailData.subject),
replyTo: String(mailData.email), // This is optional and reliant on your form actually collecting a field named `email`
body: String(all)
});
doGet();
return HtmlService.createHtmlOutput('xxxxxxxxxx.com');
} catch(error) { // if error return this
Logger.log(error);
return ContentService
.createTextOutput(JSON.stringify({"result":"error", "error": error}))
.setMimeType(ContentService.MimeType.JSON);
}
}
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index');
}
这是我的 HTML 代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="2;url=xxxxxxxxxx.com" />
<base target="_top">
</head>
<body>
Click <a href="xxxxxxxxxx.com">here</a> to go back.
</body>
</html>
让脚本打开 index.html 页面以便我可以轻松重定向回自定义 URL 的最佳方法是什么?
这是一个在处理 POST 请求后重定向的工作示例。
Code.gs
var REDIRECT_URL = "http://www.whosebug.com";
function doPost(e) {
Logger.log("POST request");
Logger.log(e)
return redirect();
}
function doGet() {
Logger.log("GET request");
var template = HtmlService.createTemplateFromFile("form");
template.url = ScriptApp.getService().getUrl();
return template.evaluate();
}
function redirect() {
return HtmlService.createHtmlOutput(
"<script>window.top.location.href=\"" + REDIRECT_URL + "\";</script>"
);
}
form.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<form action="<?= url ?>" method="post">
<input type="text" name="test_field" value="test data">
<button type="submit">Submit form</button>
</form>
</body>
</html>
用法
当我访问已发布的网络应用程序(即使用 GET 请求)时,我看到了简单的表单。
提交该表格(即使用 POST 请求),我立即被重定向到 http://www.whosebug.com
。
脚本日志中捕获了此输出:
[18-06-19 10:39:04:731 PDT] POST request
[18-06-19 10:39:04:732 PDT] {parameter={test_field=test data}, contextPath=, contentLength=20, queryString=, parameters={test_field=[test data]}, postData=FileUpload}
关于您的代码示例,您有:
doGet();
return HtmlService.createHtmlOutput('xxxxxxxxxx.com');
这没有意义,因为您没有对 doGet()
的结果做任何事情。为了使 doGet()
调用有用,将上面的替换为以下内容:
return doGet();
我在将 google 脚本页面重定向回我的自定义 URL 时遇到了问题。该脚本当前正在执行,但我无法让它在完成执行后重定向回其前一页。
这是 script.gs 代码:
function doPost(e) {
try {
Logger.log(e); // the Google Script version of console.log see: Class Logger
record_data(e);
// shorter name for form data
var mailData = e.parameters;
var name= String(mailData.name);
var message= String(mailData.message);
var email= String(mailData.email);
var all= ("Name: "+name+"\nReply address: "+email+"\nMessage: "+message);
// determine recepient of the email
// if you have your email uncommented above, it uses that `TO_ADDRESS`
// otherwise, it defaults to the email provided by the form's data attribute
var sendEmailTo = (typeof TO_ADDRESS !== "undefined") ? TO_ADDRESS : mailData.formGoogleSendEmail;
MailApp.sendEmail({
to: String(sendEmailTo),
subject: String(mailData.subject),
replyTo: String(mailData.email), // This is optional and reliant on your form actually collecting a field named `email`
body: String(all)
});
doGet();
return HtmlService.createHtmlOutput('xxxxxxxxxx.com');
} catch(error) { // if error return this
Logger.log(error);
return ContentService
.createTextOutput(JSON.stringify({"result":"error", "error": error}))
.setMimeType(ContentService.MimeType.JSON);
}
}
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index');
}
这是我的 HTML 代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="2;url=xxxxxxxxxx.com" />
<base target="_top">
</head>
<body>
Click <a href="xxxxxxxxxx.com">here</a> to go back.
</body>
</html>
让脚本打开 index.html 页面以便我可以轻松重定向回自定义 URL 的最佳方法是什么?
这是一个在处理 POST 请求后重定向的工作示例。
Code.gs
var REDIRECT_URL = "http://www.whosebug.com";
function doPost(e) {
Logger.log("POST request");
Logger.log(e)
return redirect();
}
function doGet() {
Logger.log("GET request");
var template = HtmlService.createTemplateFromFile("form");
template.url = ScriptApp.getService().getUrl();
return template.evaluate();
}
function redirect() {
return HtmlService.createHtmlOutput(
"<script>window.top.location.href=\"" + REDIRECT_URL + "\";</script>"
);
}
form.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<form action="<?= url ?>" method="post">
<input type="text" name="test_field" value="test data">
<button type="submit">Submit form</button>
</form>
</body>
</html>
用法
当我访问已发布的网络应用程序(即使用 GET 请求)时,我看到了简单的表单。
提交该表格(即使用 POST 请求),我立即被重定向到 http://www.whosebug.com
。
脚本日志中捕获了此输出:
[18-06-19 10:39:04:731 PDT] POST request
[18-06-19 10:39:04:732 PDT] {parameter={test_field=test data}, contextPath=, contentLength=20, queryString=, parameters={test_field=[test data]}, postData=FileUpload}
关于您的代码示例,您有:
doGet();
return HtmlService.createHtmlOutput('xxxxxxxxxx.com');
这没有意义,因为您没有对 doGet()
的结果做任何事情。为了使 doGet()
调用有用,将上面的替换为以下内容:
return doGet();