对 Google Apps 脚本实施的请求来自 Postman 但不是来自 javascript

Request to Google Apps Scripts Implementation works from Postman but not from javascript

我在 Apps 脚本中为 google sheet 定义了这个脚本:

function doPost(e) {
  var app = SpreadsheetApp.getActive();
  var sheet = app.getSheetByName('Web');

  var content = JSON.parse(e.postData.contents)
  sheet.getRange("A1").setValue(content);

  return ContentService.createTextOutput("Saved");
}

我将其实现为 Web Application 并将访问权限设置为 Anyone

然后尝试通过 postman 向生成的 url 发送 post 请求并且它完美地工作。还尝试了其他 postman like 应用程序。一切都没有问题。请求的内容主体始终存储在“A1”单元格中。

但是当我想使用 Fetch API 从我的 Vue.js 网络应用程序发送完全相同的请求时。它失败并出现错误:TypeError: Failed to fetch。从错误中无法读取任何其他内容。没有状态码,什么都没有。 从我的 Web 应用程序单击按钮时调用的函数的主体:

function sendForm() {

    var myHeaders = new Headers();
    myHeaders.append("Content-Type", "application/json");

    var raw = JSON.stringify({
        "test": "testing from vue"
    });

    var requestOptions = {
        method: 'POST',
        headers: myHeaders,
        body: raw,
        redirect: 'follow'
    };

    fetch("https://script.google.com/macros/s/<id of the implementation>/exec", requestOptions)
        .then(response => response.text())
        .then(result => console.log(result))
        .catch(error => console.log('error', error));
}

javascript 代码是由 postman 本身生成的,因此应该没有区别。

这是控制台输出:

也尝试过axios。类似的问题,但错误不同:Network Error

我不知道该做什么或去哪里看。我 googled 几个小时,但没有发现任何帮助。如果有人知道可能是什么原因,我将不胜感激。

来自Then tried sending post request through postman to the generated url and it worked flawlesly.,我确认您的网络应用程序可以正确使用。这样的话,以你的脚本为例,下面的修改怎么样?

修改后的脚本:

function sendForm() {
  var raw = JSON.stringify({"test": "testing from vue"});
  var requestOptions = {
    method: 'POST',
    body: raw,
  };
  fetch("https://script.google.com/macros/s/<id of the implementation>/exec", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
}
  • 当我使用您的 Web Apps 脚本测试此修改后的脚本时,我确认 {test=testing from vue} 已放入单元格。