【问题标题】:Pass value from ajax to Google Apps Script将值从 ajax 传递到 Google Apps 脚本
【发布时间】:2016-02-22 11:37:31
【问题描述】:

我是 Google Apps 脚本的新手,我正在尝试制作一个网络应用程序,我可以将值从 Ajax 传递到我的脚本的网络应用程序。我可以直接从网络应用程序执行它,但它不能在我的网页上运行。这是我的代码,

网页的 JS

$(document).ready(function () {
  $('#btnGet').click(function () {
    var getId = $('#text').val();
    $.ajax({
      url: "https://script.google.com/macros/s/AKfycbwpkBW7qKZBeJ011C7j3le4vV8D0SEHu9709mWtEMzJgrJmHnaR/exec",
      data: getId,
      type: "GET",
      crossDomain: true,
      success: function (data) {
        console.log(data);
        alert("Success!");
      },
      error: function (data) {
        console.log(data);
        alert("Failed!");
      }
    });
  });
});

Google Apps 脚本

function doGet(e) {
  var html ="<input type='text' id='text' /><br><br><input type='button' id='btnGet' onclick='myClick()' value='submit' /><br><br>";
  html+="<script>";
  html+="document.getElementById('btnGet').onclick = function() { var e = document.getElementById('text').value; google.script.run.newEntry(e); }</script>";
  return HtmlService.createHtmlOutput(html);
}

function newEntry(text) {
  Logger.log(text);
  var ss = SpreadsheetApp.openById(text);
  var sheet = ss.getSheetByName("Sheet1");
  var lr = sheet.getLastRow();
  sheet.getRange(lr+1, 1, 1, 3).setValues([["First Name", "Last Name", "Email"]]);
}

如何将值从 ajax 传递到我的应用程序脚本?

【问题讨论】:

    标签: javascript jquery ajax google-chrome-extension google-apps-script


    【解决方案1】:

    尝试将您发送的数据附加到网址的末尾:

    "ScriptUrl/exec?getIdKey=getIdValue"

    Docs 为那个。

    您的 data 属性可能只是被忽略了。

    然后可以通过以下方式在doGet(e) 中访问该值:

    var getIdValue = e.parameter.getIdKey

    Docs 为那个

    【讨论】:

    • 谢谢。但它仍然无法正常工作。请查看我的更新。
    • 我也试过将数据发送到 url 的末尾,还是不行。我已经尝试记录该值。它似乎是从我的网页上获取的,但由于某种原因,工作表没有更新。
    • 您是否希望 .gs Web 应用程序在数据最终传递到 newEntry() 之前在另一个窗口中打开时进行实时更新?
    • 不,我只想通过我的网页运行网络应用程序。
    • 是的,这行得通。我想我终于弄清楚了网络应用程序是如何工作的。非常感谢您的时间! :)
    【解决方案2】:

    您必须进行页面重定向并通过单击或其他方式导航到脚本发布的 url

    因为禁止向 Google Apps 脚本服务器发出 XHR 请求

    禁止来自外部客户端的 XHR 请求,但在 Google App 脚本编辑器中,对服务器端脚本(即 .gs 文件中的任何一个函数)的调用默认是异步的,可以使用 google.script.run 进行调用

    更多内容请参考官方文档。

    Google App Script Restrictions

    【讨论】:

    • OP 没有尝试从 .gs 网络应用发出 XHR 请求。它来自 Chrome Ext html 页面。
    • 我知道这就是我将他指向限制页面的原因。 Chrome Ext 作为外部客户端无法向应用脚本发出 XHR 请求,要发出 XHR 请求,它必须在 Google 应用脚本环境中发出。
    • "只要首先请求跨域权限,扩展程序就可以与其源之外的远程服务器通信。" - chrome docs。 OP 在他的分机中使用crossDomain: true,
    • 我知道扩展可以向外部服务器发出 XHR 请求,但不能向 App Acript Server 发出 XHR 请求,这与我所说的限制相同。
    • 请查看我的回答中的 cmets,并在我链接到的第一个文档的底部作为 GS 中的 ContentService 将处理从任何地方发起的请求。 google.script.run 也不适用于这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多