调用谷歌应用脚本

Call Google App Scripts

本文关键字:脚本 应用 谷歌 调用      更新时间:2023-09-26

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

XMLHttpRequest 无法加载 https://script.google.com/macros/s/XXXXXXXXXX/exec。 请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"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");
    }
});

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

此问题有 2 个部分 - 您无法发布(非字符串化)对象,并且谷歌应用脚本上的错误没有 CORS 标头

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

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

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

当我读到我个人发现我无法在 javascript 中发送原始对象 - 通过帖子传递对象

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

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

在部署代码

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