【问题标题】:Call Google App Scripts调用 Google 应用脚本
【发布时间】:2016-03-17 00:42:07
【问题描述】:

我已经发布了一个应用脚本,我在浏览器中测试了查询字符串,它运行良好。我想向脚本发送一个 xmlhttprequest,但它显示 =>

XMLHttpRequest 无法加载 https://script.google.com/macros /s/XXXXXXXXXX/exec。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'https://docs.google.com' 因此不允许访问。

这是应用脚本代码:

function doGet(e){
  Logger.log(e.parameter.id);
  //other function
  return ContentService.createTextOutput("Hello World");
}

这是客户端代码:

$.ajax({
    url:'https://script.google.com/macros/s/XXXXXXXX/exec',
    method:'POST',
    data:{
        id: "123123"
    },
    success:function(){
        console.log("success");
    }
});

【问题讨论】:

  • doGet(e) 更改为 doPost(e) 看看会发生什么。
  • @SandyGood 我已经改成 doPost(e) 了,但是还是不行。
  • Apps Script 项目中的权限设置是什么?如果它不开放供任何人运行,那么您需要使用 AOuth2 进行身份验证。

标签: javascript json ajax google-apps-script xmlhttprequest


【解决方案1】:

有几种可能,我自己之前遇到过这个错误。由于我没有足够的声誉来评论和要求澄清,我会写出最可能的原因。

这个问题有 2 个部分 - 您不能发布(未字符串化的)对象,而且谷歌应用脚​​本上的错误没有 CORS 标头

解决方案:字符串化并解析对象

如果不将对象转换为字符串,您的浏览器只会发送 [Object object] 而不是信息。 这将导致您的脚本出错,并且 Google Script 的错误消息是没有 CORS 标头的 HTML 网页,这会触发 CORS 错误,并不能真正告诉您真正的问题

为了能够成功发布参数,您必须将对象转换为字符串(例如,通过使用JSON.stringify()),通过您的谷歌应用脚​​本上的e.postData.contents 获取值,解析它,然后才能使用就好像它是一个物体一样。

我个人在阅读时发现我无法在javascript - pass object via post 中发送原始对象

您提到,当您在浏览器中使用查询字符串测试代码时,该代码有效,但是,它是不同的,因为它将是一个 GET 请求,并且将触发 doGet 而不是 doPost

这是最可能的解释,希望对您有所帮助!

在部署代码之前,请使用默认值测试您的代码,因为一旦部署代码,它就会变得非常麻烦。您可以使用https://hurl.it 来查看实际结果,而不会出现 cors 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多