【问题标题】:How to send data through URL via Google Scripts如何通过 Google 脚本通过 URL 发送数据
【发布时间】:2021-01-04 11:04:45
【问题描述】:

我正在尝试通过 Google 脚本将电子邮件地址从 google 表格发送到外部网页,但它似乎不起作用。

从阅读其他类似问题来看,我似乎需要 doPost() 函数,但我不确定如何将它合并到我的脚本中。

这是我的谷歌脚本

function getEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var myUrl = 'https://my.url/';

  if(data) {
    for(var i = 0; i < data.length; i++) {
      if(i !== 0) {
        postToForm(myUrl, data[i][0]); 
      }
    }
    deleteData(sheet, data);
  }
}
function postToForm(url, data) {
  UrlFetchApp.fetch(url + 'user/add/?email=' + data);
}
function deleteData(sheet, data){
  for (var i = data.length; i>1; i--) {
    sheet.deleteRow(i); 
  }
}

这里是接收脚本:

<script>
    window.addEventListener('DOMContentLoaded', async () => {
      if (location.search) {
        const urlSearchParams = location.search;

        try {
          await DB.ready();

          const email = getUrlParameter('email', urlSearchParams);

          if (email) {
            emailSignUp(email)
            return;
          }

        } catch (error) {
          console.log(error);
          showSnackBar('Something went wrong', false);
          return;
        }
      }
      showSnackBar('Something went wrong', false);
    });

    function getUrlParameter(key, urlSearchParams) {
      key = key.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
      var regex = new RegExp('[\\?&]' + key + '=([^&#]*)');
      var results = regex.exec(urlSearchParams);
      return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
    }
</script>

也许我需要将 postToForm 函数更改为 doPost 并以这种方式添加?

谢谢

【问题讨论】:

标签: javascript google-apps-script google-sheets


【解决方案1】:

回答

一方面有UrlFetchApp,它旨在获取资源并通过Internet 与其他主机通信。另一方面,doPost 在将HTTP POST 请求发送到web app 时运行。它由用户使用 Google Apps 脚本开发,并将脚本发布为web app

在您的情况下,当您调用外部网络时,您需要以正确的方式使用UrlFetchApp。在文档中有两个examples 展示了如何制作HTTP request,但是您的情况看起来不同。通常,当您发出HTTP POST 请求以将数据发送到服务器时,您将该数据放在消息正文请求中,但根据您的API 的设计,您可以通过URI 的查询组件发送数据。

在您的情况下,代码将如下所示:

function postToForm(url, data) {
  var uri =  url + 'user/add/?email=' + data
  var options = {
    'method' : 'post',
    'payload' : ''
  };
  UrlFetchApp.fetch(uri, options);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2019-07-20
    • 2013-08-15
    • 2013-03-25
    • 2013-11-29
    相关资源
    最近更新 更多