我正在编写脚本以将数据发布到电子表格,但是在Postman上测试该脚本时出现错误:
CORS Error: The request has been blocked because of the CORS policy
下面是我的脚本:
var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1UEzI8a8qVBqzVGuA4AZKs4eb4Y5bqOlIOJWwBDkEKb8/edit#gid=0");
var sheet = ss.getSheetByName('Items'); // be very careful ... it is the sheet name .. so it should match
function doPost(e) {
var action = e.parameter.action;
if (action == 'addItem') {
return addItem(e);
}
}
function addItem(e) {
var date = new Date();
var id = "Item" + sheet.getLastRow(); // Item1
var itemName = e.parameter.itemName;
var brand = e.parameter.brand;
sheet.appendRow([date, id, itemName, brand]);
return ContentService.createTextOutput("Success").setMimeType(ContentService.MimeType.TEXT);
}
答案 0 :(得分:0)
您需要从doPost
而不是addItem
返回一个值。
这也总是使我绊倒。如果没有返回值,则会收到CORS警告,并且POST失败。
由于这个原因,很难判断脚本是否失败或发布请求是否有问题。尝试将所有内容包装在try, catch, finally
中,以确保始终返回一个值。
尝试一下。有点冗长,但它应确保您确实收到对POST请求的响应,并且该响应包含查看出问题所在所需的所有信息。
function doPost(e) {
var returnJson = {
success: false,
errors: [],
returnValue: null,
debug: [],
};
try {
if (e.parameter && e.parameter.action) {
var action = e.parameter.action;
if (action == "addItem") {
var itemAdded = addItem(e);
returnJson.debug.push(itemAdded);
}
returnJson.success = true;
} else {
returnJson.debug.push("No value 'action' in e.parameter");
}
} catch (err) {
returnJson.errors.push(err);
} finally {
return ContentService.createTextOutput(
JSON.stringify(returnJson)
).setMimeType(ContentService.MimeType.JSON);
}
}
function addItem(e) {
var returnJson = {
success: false,
errors: [],
returnValue: null,
debug: [],
};
try {
var date = new Date();
var id = "Item" + sheet.getLastRow(); // Item1
var itemName = e.parameter.itemName;
var brand = e.parameter.brand;
var ss = SpreadsheetApp.openByUrl(
"https://docs.google.com/spreadsheets/d/1UEzI8a8qVBqzVGuA4AZKs4eb4Y5bqOlIOJWwBDkEKb8/edit#gid=0"
);
var sheet = ss.getSheetByName("Items"); // be very careful ... it is the sheet name .. so it should match
sheet.appendRow([date, id, itemName, brand]);
returnJson.success = true;
} catch (err) {
returnJson.errors.push(err);
} finally {
return returnJson;
}
}