gpt4 book ai didi

javascript - 使用 HtmlService 在谷歌应用程序脚本中保存状态的位置

转载 作者:行者123 更新时间:2023-11-29 10:09:22 25 4
gpt4 key购买 nike

我有以下已发布的带有 code.gs

的网络应用程序
var queryString

function doGet(e) {
queryString = e.queryString

//logger only works if the return value is commented out
Logger.log(queryString)

return HtmlService.createHtmlOutputFromFile('index.html')
}

function getQueryString() {
// this prints "a=1" on the html
// return "a=1"

// this prints "undefined" on the html
return queryString
}

index.html

<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
function onSuccess(queryString) {
var div = document.getElementById('output');
div.innerHTML = queryString;
}
</script>
</head>
<body>
<button type="button" onclick="javascript:google.script.run.withSuccessHandler(onSuccess).getQueryString();">show query string</button>
<div id="output"></div>
</body>
</html>

按下按钮后,网页如下所示
enter image description here

但是,我希望显示查询字符串。查询字符串的值在 doGet() 调用期间保存到全局变量 queryString 中。一旦用户按下按钮,服务器端函数 getQueryString 应该向客户端 html 页面提供全局变量 queryString 的值,但它没有。似乎每次使用新初始化的变量调用服务器端函数时都会生成一个新的上下文

PropertiesService 的使用对我来说似乎有些矫枉过正。解决该问题的最佳方法是什么?

最佳答案

分配给全局变量的值在堆栈完成后不会保留。如果使用全局变量的函数不调用另一个函数,则堆栈中没有其他函数。重要的是要知道全局变量的值将在同一堆栈中从一个函数调用到另一个函数调用时保持它的值。因此,您可以使用全局变量使值可用于其他函数,而不是在函数之间传递值。但是,您确实需要了解使用全局变量的危险。许多人强烈反对使用全局变量。但我并不是要回答为什么你应该或不应该使用全局变量,或者你是否应该在什么条件下使用。

我是说您应该根据自己的情况使用 Properties Service。

如果调用的初始函数调用另一个函数,然后第二个函数调用第三个函数,则全局变量将保留它从第一个函数到第二个函数以及第二个函数到第三个函数的值,等等,但是一旦链(堆栈)中的所有函数都完成,全局变量的值就消失了。

如果您需要从一个代码运行实例中保存一个值,然后从另一个代码运行实例中检索该值,那么您可以使用缓存服务或属性服务。

缓存服务是定时的。存储仅持续一定时间。缓存服务使用默认时间计时,可以使用设置覆盖该时间。

属性服务是永久性的。存储在 Properties Service 中的值永远不会丢失它的值,除非您有意删除或更改它。属性服务存储绑定(bind)到文档、用户或脚本。如果你使用文档属性,然后删除文档,那么存储的值也会消失。

因此,除非您想将查询字符串保存到云端硬盘文件,否则缓存服务和属性服务是您唯一可用的选项。听起来您可能想要查看缓存服务,并确保您考虑在值“超时”之前它应该在内存中保留多长时间。

关于javascript - 使用 HtmlService 在谷歌应用程序脚本中保存状态的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36509175/

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