繁体   English   中英

调用 Google 应用脚本

[英]Call Google App Scripts

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

XMLHttpRequest 无法加载https://script.google.com/macros /s/XXXXXXXXXX/exec。 请求的资源上不存在“Access-Control-Allow-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");
    }
});

有几个可能性,我自己之前就遇到过这个错误。 由于我的声誉不足以发表评论并要求澄清,我将写下最可能的原因。

此问题有 2 个部分 - 您不能发布(未字符串化的)对象,并且 google 应用程序脚本上的错误没有 CORS 标头

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

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

为了能够成功发布参数,您必须将对象转换为字符串(例如,通过使用JSON.stringify() ),通过您的 google 应用程序脚本上的e.postData.contents获取值,然后解析它把它当作一个对象来使用。

我个人在阅读时发现我无法在javascript 中发送原始对象- 通过 post 传递对象

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM