gpt4 book ai didi

javascript - doGet(e) 参数未定义

转载 作者:行者123 更新时间:2023-12-03 03:11:47 24 4
gpt4 key购买 nike

我正在尝试处理 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>

我的感觉是这也行不通。请指教。

最佳答案

How can I handle the case in which there are no query parameters in e.parameters. It appears that e comes in as undefined in this case. Any ideas?

简短回答

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] {"parameter":{},"contextPath":"","contentLength":-1,"queryString":"","parameters":{}}

如您所见,有几个命名值:

  • 参数:与请求参数对应的键/值对对象。对于具有多个值的参数,仅返回第一个值。
  • contextPath:未使用。始终为空字符串。
  • contentLength:对于 doGet 始终返回 -1
  • queryString:URL 的查询字符串部分的值。
  • parameters:类似于 e.parameter 的对象,但每个键都有一个值数组

引用

注意:第一个引用说,当未指定查询字符串时,queryString 返回 null,但在我所做的测试中,情况并非如此。

关于javascript - doGet(e) 参数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46922550/

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