我正在尝试在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”文件中,我想包含使用不同参数调用google.script.run.doGet()的jquery代码,如下所示:
<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>
我的感觉是,这也行不通。请指教。
答案 0 :(得分:1)
如何处理e.parameters中没有查询参数的情况。在这种情况下,e似乎是未定义的。有什么想法吗?
function doGet(e) {
Logger.log('queryString is an empty string: ' + (e.queryString === ''));
Logger.log('parameter hasn\'t members: ' + (Object.keys(e.parameter).length === 0));
}
要写入Google Apps脚本编辑器,请使用JSON.stringify(object)
记录对象的内容。
示例:
function doGet(e) {
Logger.log(JSON.stringify(e));
}
上面的代码在日志中打印了以下文字:
[17-10-24 21:13:28:414 CDT] {&#34;参数&#34;:{},&#34; contextPath&#34;:&#34;&#34;,& #34; CONTENTLENGTH&#34;: - 1,&#34;的queryString&#34;:&#34;&#34;&#34;参数&#34;:{}}
如您所见,有几个命名值:
参考
注意:第一个引用表示queryString在未指定查询字符串时返回null
,但在我所做的测试中,这不是真的。