You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script:无法在HTML脚本标签访问evaluate传递的变量

解决Google Apps Script模板变量在客户端Script中无法访问的问题

你遇到的问题很典型——通过Google Apps Script模板传递的CollegeList变量是在服务器端渲染HTML时生成的,而客户端的<script>代码是在浏览器里运行的,默认情况下没法直接访问这些服务器端注入的变量。得把这个变量显式地暴露给客户端的JavaScript环境才行。

步骤1:在HTML模板中注入全局变量

在你的HTML文件里,在<script>标签之前,把CollegeList转换成JSON字符串并赋值给一个全局变量。这样客户端JS就能直接读取了:

<!-- 在script标签前添加这段,把服务器端的CollegeList注入到客户端 -->
<script>
  // 将服务器端传递的CollegeList转成客户端可访问的全局变量
  const collegeData = <?= JSON.stringify(CollegeList) ?>;
</script>

步骤2:修改客户端的UpdateRange函数

然后把原来的UpdateRange函数里的CollegeList换成刚才定义的collegeData,同时注意你原来的代码里filter函数后面少了一个闭合括号,这个也要补上:

<script type="text/javascript">
function UpdateRange(v) {
  // 清空院校下拉框的所有选项
  const collegeSelect = document.getElementById('college');
  collegeSelect.options.length = 0;

  // 添加默认空白选项
  var optn = document.createElement("OPTION");
  optn.text = '';
  optn.value = '';
  collegeSelect.options.add(optn);

  // 筛选对应城市的院校(补上filter的闭合括号)
  const thisCity = collegeData.filter(function (dr) {
    return dr[1] === v;
  });

  // 生成院校选项
  for (var i = 0; i < thisCity.length; i++) {
    var optn = document.createElement("OPTION");
    optn.text = thisCity[i][0];
    optn.value = thisCity[i][0];
    collegeSelect.options.add(optn);
  }
}
</script>

完整的修改后HTML代码

把这些整合起来,我还帮你修正了一个小错误:原来的院校下拉框name属性写成了city,应该改成college,这样表单提交时参数名才准确。最终HTML代码如下:

<form id="form1">
  <label for="city">City </label>
  <select name="city" size="1" id="city" onchange="UpdateRange(this.value);">
    <option hidden selected></option>
    <?for(var c=0; c<cities.length; c++){?>
      <option value="<?=cities[c]?>"><?=cities[c]?></option>
    <?}?>
  </select>

  <label for="college">Colleges </label>
  <select name="college" size="1" id="college">
    <option hidden selected></option>
  </select>
  <br>
  <input type="submit" class="btn btn-primary" value="Submit">
</form>

<!-- 注入全局变量 -->
<script>
  const collegeData = <?= JSON.stringify(CollegeList) ?>;
</script>

<!-- 处理下拉框更新的脚本 -->
<script type="text/javascript">
function UpdateRange(v) {
  const collegeSelect = document.getElementById('college');
  collegeSelect.options.length = 0;

  // 添加空白选项
  var optn = document.createElement("OPTION");
  optn.text = '';
  optn.value = '';
  collegeSelect.options.add(optn);

  // 筛选对应城市的院校
  const thisCity = collegeData.filter(dr => dr[1] === v);

  // 添加院校选项(用forEach简化代码)
  thisCity.forEach(item => {
    var optn = document.createElement("OPTION");
    optn.text = item[0];
    optn.value = item[0];
    collegeSelect.options.add(optn);
  });
}
</script>

为什么这样可行?

当Google Apps Script的template.evaluate()运行时,<?= JSON.stringify(CollegeList) ?>会被替换成实际的JSON字符串(比如[["北京大学","北京"],["清华大学","北京"]])。这样客户端的JavaScript就能直接把这个JSON字符串解析成数组,作为全局变量collegeData来使用了。

内容的提问来源于stack exchange,提问作者shahbaz haidar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:56:57