我正在尝试实现一个具有客户端和服务器端的GAS脚本。我希望从客户端读取服务器的“进度”信息。由于GAS中的全局变量只是上下文全局(每次调用都会重置),因此我被告知您使用“属性”。如果我理解正确,服务器端设置的“属性”是否应该在不同的主机函数调用之间保留其值?这不会发生。
这是我的剧本:
<!DOCTYPE html>
<div class="container" style="text-align:center">
<button type="button" onclick="setValue();" id="click1">click first</button>
<button type="button" onclick="getValue();" id="click2">click second</button>
<p id="fname" > 00 </p>
</div>
<script type="text/javascript">
function setValue(){
google.script.run
.withSuccessHandler(helper)
.test();
return;
}
function helper(v){
document.getElementById('fname').innerHTML = v;
}
function getValue(){
google.script.run
.withSuccessHandler(helper2)
.test2();
}
function helper2(v){
document.getElementById('fname').innerHTML = v;
}
var userProperties = PropertiesService.getScriptProperties();
//var userProperties = PropertiesService.getUserProperties()
userProperties.setProperty('SearchProgress', 50);
Logger.log('orig value = ' + userProperties.getProperty('SearchProgress'));
function doGet() {
var html = HtmlService.createHtmlOutputFromFile('test')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
return html;
}
function test(){
userProperties.setProperty('SearchProgress', 60);
var value = userProperties.getProperty('SearchProgress');
Logger.log('set value = ' + value);
return value;
}
function test2(){
//userProperties.setProperty('SearchProgress', 100);
var value = userProperties.getProperty('SearchProgress');
Logger.log('get value = ' + value);
return value;
}
这是一段非常简单的代码。客户端将创建2个按钮和一个文本字段。它应该从服务器端脚本中获取所需的值并将其显示在文本框中。
先按下按钮1,然后按下按钮2.
期望输出: 60 60
实际输出: 60 50
不知何故,当按下按钮2时,按下按钮1时,不返回分配给属性的值“60”。我无法弄清楚原因。
(注意:如果属性被声明为'script'或'user'并不重要。两者都给出相同的结果。)
非常感谢您的帮助。
答案 0 :(得分:1)
好的,我想通了:)行号。 3在服务器端代码:
userProperties.setProperty('SearchProgress', 50);
在每次调用脚本时执行(即:每次按下按钮1或2),因此将值重置为“50”。删除全局初始化解决了这个问题。