【问题标题】:Getting CORS using JS and Google Apps script使用 JS 和 Google Apps 脚本获取 CORS
【发布时间】:2021-05-19 21:54:41
【问题描述】:

我正在使用 Google Apps 脚本,我只是尝试从前端的 javascript 连接到 Google 脚本,但我不断收到 CORS 错误。

CORS 策略已阻止从源“null”访问“https://script.google.com/macros/s/KEY/exec”处的 XMLHttpRequest:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。

在 JS 我有这个

  var email = $('#ID_EMAIL').val();

    $.post("https://script.google.com/macros/s/KEY/exec",
        {
          email: email
        },
        function (data) {
            console.log("success");
        }, 'json');

在气体中

function doPost(e) {
  return "hello";
  }

如果它只是一个基本代码,我不知道为什么我会不断收到错误。

我已将 google 表格作为网页发布,并将 GAS 作为网络应用程序发布给任何人。

我不知道我错过了什么

【问题讨论】:

  • 考虑在 post 请求中添加标头 Access-Control-Allow-Origin *

标签: javascript google-apps-script


【解决方案1】:

这件事不久前发生在我身上,让我发疯。希望我能减轻你的痛苦。最终的问题(在我看来)是错误消息实际上并没有帮助,因为它会将您送入一个实际上没有用的 CORS 兔子洞。

要使 doPost / doGet 方法按预期工作,您必须返回一个 ContentService 对象。因此,如果您将 doPost 更改为以下内容,您应该会很好:

function doPost(e) {
  return ContentService.createTextOutput("hello");
  }

或者,如果你想返回一个 json:

return ContentService
    .createTextOutput(JSON.stringify({
      "result": "success",
      "success": "hello"
    }))
    .setMimeType(ContentService.MimeType.JSON);

确保在进行更改后重新部署您的网络应用。

您似乎并非如此,但是,值得一提的是,如果 google script web 应用程序中出现任何致命错误,您将看到 CORS 错误(至少根据我的经验)。例如,曾几何时,我看到了这个错误,因为虽然我返回了一个 ContentService 对象,但我调用了一个尚未定义的变量,所以脚本在执行 return 语句之前就出错了。

【讨论】:

  • 即使进行了这些更改,我仍然会收到 CORS,如果我更改发布请求的结构并添加 dataType:"jsonp" 和 crossDomain:true,那么它不会触发 CORS 错误,而是触发 CORB 错误。
  • 啊有趣,我记得当我遇到这个问题时尝试过 jsonp 的东西,但它对我也不起作用。您使用的是哪种 doPost 结构?您的 post 请求通过最后一个参数指定了 json 数据类型,因此您应该使用我写的第二个。你可以看到我的实现 here 和一个小 jsfiddle 显示 post request
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多