【问题标题】:Send JSONP data to Google Apps script from javascript从 javascript 将 JSONP 数据发送到 Google Apps 脚本
【发布时间】:2015-08-05 16:54:32
【问题描述】:

我正在尝试将数据发送到谷歌应用脚​​本,以创建数据并将其插入工作表中。我希望发生的是,使用该页面的人将被要求授权该应用程序(仅在组织内允许)。因此,当授权时,页面上的 javascript 将通过 jsonp 将数据发送到应用程序脚本,该脚本将处理并生成工作表,然后将其保存到用户驱动器,并向他们显示链接(或在新选项卡中打开它)。

但是当我尝试这个时,我遇到了问题。这是我的应用程序中的 javascript(不是 googles html,我自己的应用程序)。

var foo = function(data) {
    console.log('foo')
    console.log(data)
}

var url = "https://script.google.com/a/macros/viedu.org/s/AKfycbzF6g9dAC5DI7Qtl0VD3QeYGsDbo43XxuVtoEYSHEA5_4yibYFN/exec"
console.log(url)

var data = {
    "foo": "bar"
}

$.ajax({
    "url": url,
    // The name of the callback parameter
    jsonp: "callback",
    // Tell jQuery we're expecting JSONP
    dataType: "json",
    jsonpCallback: foo,
    "data": data
})
.done(function(response) {
  console.log('success')
  console.log(response)
})
.fail(function(response) {
  console.log('fail')
  console.log(response)
})

还有我的应用脚本:

function doGet(e) {

  var cb = e.parameter.callback;
  var data = JSON.stringify({"data":"bar"});
  var outputStr = cb + "(" + data + ")";

  return ContentService
    .createTextOutput(outputStr)
    .setMimeType(ContentService.MimeType.JAVASCRIPT);

}

以及我在 chrome 控制台中的回复:

fail
script.html:39 Object {readyState: 0, responseJSON: undefined, status: 0, statusText: "error"}

来自应用脚本的响应似乎返回为未定义。但我不知道为什么。如果我在 jquery 中尝试几乎任何其他内容,我会收到错误消息,指出它正在尝试解析 html/text 并且是无效的 javascript。但我看不出应用脚本有什么需要改变的,因为它看起来相当简单。

【问题讨论】:

  • 值得检查以确保您的网络应用程序将谁可以访问设置为任何人,甚至匿名。
  • 如果我们想限制对我们组织的访问,为什么要将其设置为匿名?因为我希望用户触发脚本得到他的授权,所以表格保存在他们的驱动器帐户中。
  • 但是如果您的应用脚本访问受限,则只有在您通过 ajax 调用的同时通过身份验证后才能访问它。 AFAIK,没有特定于 Apps 脚本的 oAuth 范围,但完整的 Google Drive 访问权限可能会起作用。
  • 所以您的应用程序托管在某个地方,您想从那里调用应用程序脚本吗?那是对的吗?如果您想访问用户的云端硬盘,您将让他们使用 OAuth 进行身份验证(即使在应用程序脚本中也是如此)如果您只是在应用程序脚本中调用云端硬盘服务,它将是您自己的,因为它是脚本的所有者。如果您已经拥有您的 web 应用程序,您可以对用户进行身份验证并访问他们的云端硬盘,这里是文档。 developers.google.com/identity/protocols/OAuth2WebServer?hl=en 这是一个例子:developers.google.com/drive/web/quickstart/quickstart-js

标签: javascript jquery ajax google-apps-script jsonp


【解决方案1】:

替换这个:

return ContentService.createTextOutput(outputStr).setMimeType(ContentService.MimeType.JAVASCRIPT);

用这个:

var params = JSON.stringify(getr);
return ContentService.createTextOutput(params);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多