将 URL 参数传递到 Web 应用程序脚本中

2023-12-07

这个问题让我想拔掉头发。我正在尝试将 URL 参数传递给 Google Apps 脚本,其中包含我想要呈现的数据的行 ID(来自电子表格)。我的参数是story。但是,无论我尝试什么,我都会遇到各种各样的错误。最新的是:

类型错误:无法从未定义中读取属性“参数”。 (第 2 行,文件“Code”,项目“singleStory”)

下面是我的 Code.gs 和 Index.html 文件(该项目尚未完成。这正是我目前所处的位置。)

Code.gs

function doGet(e) {
    var i = e.parameter.story;
    return HtmlService
      .createTemplateFromFile('Index')
      .evaluate()
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);

 function getData() {
 return SpreadsheetApp
      .openById("1Z582cnr03fkLC7xCca4pcj7QwDtSCS4KGneyFKMgdyo")
      .getSheetByName("StoryTopics")
      .getDataRange()
      .getValues();
 }
}

索引.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
  <? var data = doGet(); ?>

<div id="container">
<div id="header">
<div id="topicname">
    <?= data[i][0] ?>
</div>
<div id="todaysdate">
<p>As of: <?= new Date() ?></p>
</div>
<div id="topictype">
<?= data[i][1] ?>
</div>
<div id="locale">
<?= data[i][2] ?>
</div>
</div>
<div id="contact_container">
<div id="subheader">
</div>
<div id="contact_name">
<?= data[i][3] ?>
</div>
<div id="contact_title">
<?= data[i][4] ?>, <?= data[i][5] ?>
</div>
<div id="contact_email">
<?= data[i][6] ?>
</div>
<div id="contact_phone">
<?= data[i][7] ?>
</div>
</div>
<div id="action_container">
<div id="subheader">
</div>
<table id="action_table">
<tr>
<td>
Date:
</td>
<td>
Type:
</td>
<td>
Description:
</td>
</tr>
</table>
</div>
<div id="story_container">
<div id="story_title">
</div>
<div id="story_content">
</div>
</div>
</div>
</body>
</html>

我用来测试的 URL + 参数是:

https://script.google.com/a/macros/--DOMAIN--/s/--SCRIPTID--/exec?story=3

谁能给我一些关于为什么它不起作用的想法?


类型错误:无法从未定义中读取属性“参数”。 (第 2 行,文件“Code”,项目“singleStory”)

这告诉您,您期望包含命名属性“parameter”的对象未定义。

查看您的代码(e.parameter.story),指的是事件参数e。对于那些不熟悉这一点的人来说,当在部署的 Web 应用程序中调用它时,专门命名的doGet()函数接收一个事件参数,它被命名为e在这个例子中。)

Why is e这里未定义?

您可能会看到这种情况的原因之一是,您是否从调试器运行该函数,而不是将其作为 Web 应用程序进行测试。 Kevin,这不是您的情况,因为您正在浏览器中输入 URL 来尝试启动 Web 应用程序。

问题出在模板化 HTML。 HTML 中的第一条语句是:

<? var data = doGet(); ?>

一旦我们尝试这样做,这就会引起麻烦.evaluate()模板,因为它重新调用doGet()函数,这次没有任何事件对象。这是that吐出错误消息的时间。

您可能打算这样做,而不是从电子表格中获取数据:

<? var data = getData(); ?>

完成此更改后,您现在会收到事件参数e(你总是这样做......)并且代码继续。直到下一个错误:

ReferenceError:“i”未定义。 (第 3 行,文件“代码”)

现在事情变得棘手,因为根据 Code.gs 中的此语句报告错误:

return HtmlService
    .createTemplateFromFile('Index')
    .evaluate()
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);

可是等等!不是i刚刚在第 2 行定义?是的,它是...但是这个错误是关于evaluate()正在尝试填写模板,但您的代码尚未设置i为了那个原因。您需要分解此语句以首先获取模板,然后为其设置参数,最后对其进行评估。像这样:

function doGet(e) {
  var i = e.parameter.story;

  // First, get the template
  var template = HtmlService.createTemplateFromFile('Index');

  // Second, set template parameters
  template.i = i;

  // Finally, evaluate() the template
  return template.evaluate()
                 .setSandboxMode(HtmlService.SandboxMode.IFRAME);

}  // <-- You had this on the other side of 'getData()'

那应该会让你滚动。您还有其他错误:

  • 你的功能的阻塞是错误的,你想要getData()在全球范围内,而不是在内部doGet().
  • 您可能需要调试您的模板,请按照中的指导进行操作调试模板.
  • 附有模板代码<? thusly ?>, not <?= like this ?>.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 URL 参数传递到 Web 应用程序脚本中 的相关文章

随机推荐

  • 从列表中进行互斥随机抽样

    input beleriand mordor hithlum eol morgoth melian thingol 我在创建 X 个大小为 Y 的列表而不重复任何元素时遇到问题 我一直在做的是使用 x 3 y 2 import random
  • 在android上解密php加密数据

    An Android客户端 4 2 1 应用程序通过HttpPost请求给一个PHP 5 6 API 该 API 使用以下方式加密数据AES合规的RIJNDAEL 128 然后使用 OpenSSL 公共加密的客户端公钥对 AES 加密的密钥
  • 如何在 C++ 中使用可以具有多种数据类型的单个变量

    一个变量怎么可以有两种数据类型 如果 月 是一个变量 它应该从 std cin 的输入中获取 我应该怎么做才能让用户输入 January 这样的字符串或输入像 1 这样的整数 在 C 17 中 我们得到了名为 std variant 的东西
  • 如何使用Enquire.Js?

    查询 js是一个为 Javascript 重新创建 CSS 媒体查询的 Javascript 这意味着您可以将 Javascript 封装在媒体查询中 就像您将 CSS 包装在媒体查询中一样 我不太确定如何使用它 本教程说 enquire
  • maven pom.xml如何识别非标准项目结构中的testng测试用例?

    我对 Maven 和 testng 完全陌生 我使用 Maven 作为构建工具 使用 testng 作为测试框架 我没有遵循标准的 Maven 项目结构 现在我想要我的pom xml在我的项目中执行测试用例 问题是 如何pom xml知道执
  • 从 firebase 数据库检索计算平均值

    我正在创建一个 iOS 应用程序 该应用程序使用每个地点的地名和评级 我已经把事情做好了 我的意思是 我将数据保存到数据库中 并且我也可以读取它们 唯一的问题是 当我阅读它们时 我希望它们通过计算每个位置的平均值来加载到我的 tablevi
  • postgres:在字符串中搜索多个单词

    我正在为我的公司后台系统实施基本形式的搜索 我想找到包含搜索查询中所有单词的所有产品名称 所以如果我有这两种产品 Deodorant with cucumber flavor Deoderant with apple flavor 搜索查询
  • jquery中如何获取textarea的值?

    我有这个表格 我试图从文本区域获取值 由于某种原因它不想这样做
  • 使用 FileResult 在 Asp.Net MVC 中下载任何类型的文件?

    有人建议我应该使用 FileResult 来允许用户从我的 Asp Net MVC 应用程序下载文件 但我能找到的唯一示例始终与图像文件有关 指定内容类型 image jpeg 但是如果我不知道文件类型怎么办 我希望用户能够从我网站的文件区
  • 如何使用 selenium webdriver 在 C# 中以私有模式启动 IE

    我开始将 selenium Webdriver 与 c 和 Visualstudio 一起使用 我想以私有模式启动 Internetexplorer 所以我在测试期间不必关心旧的浏览数据 我现在搜索了很长时间才找到如何做到这一点 遗憾的是我
  • Fluent NHibernate 强制外键引用不可为空

    刚刚接触一些 Fluent NHibernate AutoMap 约定 并遇到了一些我无法弄清楚的事情 我想我只是没有找对地方 基本上试图在一对多关系的 多 方面强制执行 NOT NULL 看起来 使用自动映射 它总是使数据库中的父属性 I
  • timezone_name_from_abbr() 无法正确识别

    基本上我的网站是全球性的 我需要能够检测用户的时区并显示准确的时间 我有一个非常简洁的脚本 直到现在它都可以完美地工作 它需要一个时区偏移量 我用 javascript 获取并通过 cookie 传递该时区偏移量 if empty COOK
  • Django 管理后端“操作错误”尝试写入只读数据库

    这个问题似乎已被问过很多次 但我检查过的所有解决方案尚未对我有用 我在跑步nginx在安装了 Django 1 6 1 的 Ubuntu 14 04 服务器上 我正在尝试为项目使用默认的 django 管理后端 通常位于 localhost
  • #1067 - “bonusid”的默认值无效,我该如何修复此错误?

    SQL查询 CREATE TABLE bonus bonusid INT 10 DEFAULT 0 NOT NULL AUTO INCREMENT empid INT 10 DEFAULT 0 NOT NULL datebonus DATE
  • 如何通过参数操作保护 REST API 免受重放攻击?

    我正在开发安全支付 API 我希望通过操纵 url 中的参数来避免重放攻击 例如在以下 API 调用中 一旦执行此 API 调用 具有足够知识的人就可以通过修改这三个参数中的任何一个来执行相同的 API 调用 以满足他 她自己的利益 我曾想
  • jquery - 滑动切换不平滑

    我有一个问题slideToggle函数于jQuery 一点也不顺利 每当我单击 查看更多 按钮时 应该显示的内容slideToggle 只是弹出 没有任何效果 这是 HTML 代码 td class third a href class b
  • C++ -- Detours (Win32 API 劫持) -- 劫持类方法

    我很长一段时间都没有遇到 Detours 劫持功能的问题 当我尝试劫持类方法时 在我的例子中是来自 mshtml dll 的 IHTMLDocument2 write 我遇到了无尽的问题 主要是类型不匹配 由于我在网上没有找到任何相关示例
  • Laravel 5:仅在一个 URL 上路由 CORS 问题

    我正在尝试向外部 laravel 站点发出 2 个 ajax 请求 其中一个请求完美运行 列表 另一个 savedevice 给我以下错误 访问 XMLHttpRequest 位于 http localhost somesite devic
  • 计算时间间隔

    我正在构建一些基于这篇有用的帖子 我对数据集有三个相关问题df machine ISOdatetime 1 M1 2013 08 21 18 16 39 2 M1 2013 08 21 18 20 44 3 M1 2013 08 21 18
  • 将 URL 参数传递到 Web 应用程序脚本中

    这个问题让我想拔掉头发 我正在尝试将 URL 参数传递给 Google Apps 脚本 其中包含我想要呈现的数据的行 ID 来自电子表格 我的参数是story 但是 无论我尝试什么 我都会遇到各种各样的错误 最新的是 类型错误 无法从未定义