【问题标题】:Get URL parameter passed to google form via apps script获取通过应用程序脚本传递给谷歌表单的 URL 参数
【发布时间】:2020-11-02 16:09:55
【问题描述】:

我正在尝试通过应用程序脚本将 URL 参数传递给谷歌表单,但不知道它是如何实现的。案子: https://docs.google.com/forms/d/e/XXXX/viewform?a=12 (通过XXXX,因为这个表格是供客户使用的) 我需要在提交后得到答案和这个参数。

function onSubmit(e) {
    var POST_UR​L = "www.myserver.com?id=a";//this parametr
    var form = FormApp.getActiveForm();
    var allResponses = form.getResponses();
    var latestResponse = allResponses[allResponses.length - 1];
    var response = latestResponse.getItemResponses();
    var payload = {};
    for (var i = 0; i < response.length; i++) {
        var question = response[i].getItem().getTitle();
        var answer = response[i].getResponse();
        payload[question] = answer;
    }
  
    var options = {
        "method": "post",
        "contentType": "application/json",
        "payload": JSON.stringify(payload)
    };
    UrlFetchApp.fetch(POST_URL, options);
};

​​​​ 此代码用于向我的服务器发送带有表单答案的 POST 请求,我如何将 ​a=12 或仅 12 传递给此请求?

【问题讨论】:

  • 网址https://docs.google.com/forms/d/e/XXXX/viewform?a=12 与您的代码有何关联?不清楚你在问什么。

标签: google-apps-script triggers google-forms


【解决方案1】:

您需要将值附加到POST_URL,而不是通过有效负载传递。谷歌在他们的OAuth2 library 中提供了一些很好的代码,可以为你做到这一点:

/**
 * Builds a complete URL from a base URL and a map of URL parameters.
 * @param {string} url The base URL.
 * @param {Object.<string, string>} params The URL parameters and values.
 * @return {string} The complete URL.
 * @private
 */
function buildUrl_(url, params) {
  var paramString = Object.keys(params).map(function(key) {
    return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
  }).join('&');
  return url + (url.indexOf('?') >= 0 ? '&' : '?') + paramString;
}

这意味着您可以执行以下操作:

var POST_URL = "www.myserver.com?id=a";
var payload = {a: 12};
console.log(buildUrl_(POST_URL, payload)); // www.myserver.com?id=a&a=12

function buildUrl_(url, params) {
  var paramString = Object.keys(params).map(function(key) {
    return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
  }).join('&');
  return url + (url.indexOf('?') >= 0 ? '&' : '?') + paramString;
}

最终,您的代码中的最后一行将是:

UrlFetchApp.fetch(buildUrl_(POST_URL, payload), options);

【讨论】:

  • 我可以通过哪种方式获得“a”参数?如果它是动态的
  • payload.a ...?对不起@user14061595,但我想我不明白你的问题。
  • 表示用户去docs.google.com/forms/d/e/XXXX/viewform?a=12,我需要获取一个参数,但是可以是任意数字。
  • 并用谷歌脚本发送到服务器答案和查询参数
猜你喜欢
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多