致电Google App脚本

时间:2016-03-17 00:42:07

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

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

  

XMLHttpRequest无法加载https://script.google.com/macros / s / XXXXXXXXXX / exec。 No' 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");
    }
});

1 个答案:

答案 0 :(得分:0)

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

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

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

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

为了能够成功发布参数,您必须将对象转换为字符串(例如使用 JSON.stringify()),通过 e.postData.contents 在您的 google 应用程序脚本中获取值,解析它,在您可以像使用对象一样使用它之前。

我个人在阅读时发现我无法在 javascript - pass object via post

中发送原始对象

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

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

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