【问题标题】:Add JQuery reference to custom function将 JQuery 引用添加到自定义函数
【发布时间】:2017-08-25 15:33:12
【问题描述】:

我想测试在 Google 表格的自定义函数中调用 API。 code.gs如下:

function TApi(input) {
  var url = "https://api.nytimes.com/svc/search/v2/articlesearch.json";
  url += '?' + $.param({
    'api-key': "cdaa59fea5f04f6f9fd8fa551e47fdc4",
    'q': "MIT"
  });
  $.ajax({
    url: url,
    method: 'GET',
  }).done(function(result) {
    return result;
    console.log(result);
  }).fail(function(err) {
    throw err;
  });
}

但是当我在工作表单元格中调用=TAPI() 时,它会返回错误ReferenceError: "$" is not defined. (line 22). 我想我们需要添加一个指向JQuery 的链接。有谁知道怎么做?

【问题讨论】:

    标签: google-apps-script google-sheets custom-function


    【解决方案1】:

    您只能在使用 HTML 服务的客户端脚本上使用 JQuery。它在服务器端不可用。在HTML Services Best Practices 中有一个关于使用它的简介。

    【讨论】:

      【解决方案2】:

      这是不可能的。您必须使用 HtmlService 构建 Web 应用程序或自定义 UI(侧边栏或对话框)并在客户端上进行处理。因为您的代码在 Google 服务器上运行,所以没有“窗口”或“文档”对象。 DOM 和 BOM 只能在客户端访问。

      其实,随意做下面的小实验。打开浏览器控制台(我使用的是 Chrome 开发者工具)并输入

      console.log(this); //this logs global object
      

      这是输出

      这是 jQuery 用于导航 DOM 树的“窗口”对象。 jQuery 只是一个建立在现有 DOM 操作方法和 CSS 选择器之上的 JS 库。

      接下来,打开任何 GAS 文件,运行以下函数并检查日志(Ctrl + Enter):

      function test() {
       Logger.log(this);
      }
      

      这是输出。

      如您所见,此上下文中的全局对象由 Google 定义的伪类(GAS 服务)组成。

      【讨论】:

        【解决方案3】:

        您可以使用 urlFetch 应用程序。试试下面的sn-p

        function fetchURL() {
            try {
                var url = "https://api.nytimes.com/svc/search/v2/articlesearch.json";
                url += '?api-key=cdaa59fea5f04f6f9fd8fa551e47fdc4&q=MIT';
                var params = {
                    'method': 'get',
                    'contentType': 'application/json',
                    'muteHttpExceptions': true
                }
                var response = UrlFetchApp.fetch(url, params);
                Logger.log(response)
            } catch (e) {
                Logger.log(e)
            }
        }
        

        【讨论】:

        • 我在Logger.log(response)之后添加了return JSON.stringify(response),但在单元格中我只能看到{}
        • 试试Logger.log(JSON.stringify(JSON.parse(response)));
        • 确实,return JSON.stringify(JSON.parse(response)) 有效,而 return response 无效。你知道为什么会这样吗?
        • 我认为你把事情搞混了,你正在使用谷歌电子表格自定义函数,它期望输出是字符串或数组。在您的情况下, urlfetchapp 返回对象,并且该对象无法显示在单元格中。你可以这样做response.toString()
        猜你喜欢
        • 1970-01-01
        • 2010-10-31
        • 2021-07-23
        • 1970-01-01
        • 2011-05-14
        • 2023-03-30
        • 1970-01-01
        • 2018-05-10
        • 1970-01-01
        相关资源
        最近更新 更多