【发布时间】:2018-04-05 23:03:33
【问题描述】:
我正在尝试在 Google Apps 脚本 doGet(e) 方法中处理查询参数。我已经定义了以下简单的 doGet() 函数,它根据参数(或缺少参数)为不同的 html 提供服务。
function doGet(e) {
Logger.log('In doGet');
Logger.log('query params: ' + e);
var isNull = (e.queryString == null);
var len = e.parameters.length;
Logger.log('query string is null: ' + isNull);
Logger.log('number of params: ' + len);
if (e.queryString == null) { //doesn't work!
Logger.log('Serving loginUI');
return HtmlService
.createHtmlOutputFromFile('loginUI')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setTitle("Please log in");
}
//if here, we know query string is NOT null
if (e.parameter.mode == "player") {
return HtmlService
.createHtmlOutputFromFile('playerUI')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setTitle("Following Player");
}
if (e.parameter.mode == "hole") {
return HtmlService
.createHtmlOutputFromFile('playerUI')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setTitle("Following Hole");
}
if (e.parameter.mode == "flex") {
return HtmlService
.createHtmlOutputFromFile('flexUI')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setTitle("Flex Interface");
}
}
从我的日志记录代码中可以看出,在最初调用 doGet() 时没有查询参数,我正在努力弄清楚 e 参数是什么。日志输出如下:
> [17-10-24 18:14:48:557 PDT] Starting execution [17-10-24 18:14:48:565
> PDT] Logger.log([In doGet, []]) [0 seconds] [17-10-24 18:14:48:566
> PDT] Logger.log([query params: [object Object], []]) [0 seconds]
> [17-10-24 18:14:48:566 PDT] Logger.log([query string is null: false,
> []]) [0 seconds] [17-10-24 18:14:48:567 PDT] Logger.log([number of
> params: undefined, []]) [0 seconds] [17-10-24 18:14:48:568 PDT]
> Execution succeeded [0.003 seconds total runtime]
如何处理e.parameters中没有查询参数的情况。在这种情况下,e 似乎是未定义的。有什么想法吗?
作为后续问题,我的想法是在与 doGet 提供的 html 文件关联的 javascript 中构建查询字符串。以上面代码中提到的“loginUI.html”文件为例,我想包含jquery代码,用不同的参数调用google.script.run.doGet(),如下:
<script>
$("#playerUI").click(function () {
var queryString = "?mode=player";
google.script.run.doGet(queryString);
});
$("#holeUI").click(function () {
var queryString = "?mode=hole";
google.script.run.doGet(queryString);
});
$("#flexUI").click(function () {
var queryString = "?mode=flex";
google.script.run.doGet(queryString);
});
</script>
我的感觉是这也行不通。请指教。
【问题讨论】:
-
本网站上的问题应该包含一个且只有一个问题(请参阅How to Ask)。我建议您将“跟进”问题作为一个新问题发布。
标签: javascript jquery google-apps-script