我已经发布了一个应用程序脚本,我在浏览器中测试查询字符串,效果很好。我想向脚本发送一个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");
}
});
答案 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 错误。