使用Google Apps脚本中的PropertiesServices发生意外行为

时间:2015-12-14 13:52:59

标签: 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”。我无法弄清楚原因。

(注意:如果属性被声明为'script'或'user'并不重要。两者都给出相同的结果。)

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

userProperties.setProperty('SearchProgress', 50);

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