javascript - Google Apps 脚本中 PropertiesServices 的意外行为

标签 javascript google-apps-script global

我正在尝试实现一个具有客户端和服务器端的 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;
}

GAS 服务器端:

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”。我不知道为什么。

(注意:将属性声明为“脚本”或“用户”并不重要。两者给出相同的结果。)

非常感谢您的帮助。

最佳答案

好的,我想通了 :) 第 1 行。 3 在服务器端代码:

userProperties.setProperty('SearchProgress', 50);

在每次调用脚本时执行(即:每次按下按钮 1 或 2 时),因此将值重置为“50”。删除全局初始化解决了这个问题。

关于javascript - Google Apps 脚本中 PropertiesServices 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268728/

相关文章:

javascript - 我想使用 expo AsyncStorage 将存储保留为 redux,但出现错误

javascript - 从一个单元格复制一个值并将其粘贴到另一个 - Google Apps 脚本

javascript - 调用按键 :Value pair in Google Apps Script is returning "Undefined" instead of the value

javascript - 将 Google 表格转换为单独的 PDF 并通过电子邮件发送

C++:枚举类型作为模板参数 - 全局范围

javascript - 将特定页面重定向到另一个页面和域

javascript - 将值传递给 HTML &lt;input&gt; 标记

javascript - 如何使用 jQuery 检查鼠标是否远离元素?

PHP Mysql_query 在函数内部不起作用

python - 使模块在全局范围内可用