对 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}
已放入单元格。
我在 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}
已放入单元格。