我想让myFunction()发送一个有效载荷,该载荷将由doPost处理并根据有效载荷返回一些内容。我只能在以下任何一个实例中使用这些测试脚本:
a)使用doGet(),不传递有效负载,但按预期返回输出。
OR
b)使用doPost(),传递有效负载但得到405代码而不是输出。
我错过了什么?
function doPost(e) {
var ss = SpreadsheetApp.openById('<spreadsheet id for recording parameters>');
var sheet = ss.getSheets()[0];
var record;
for (var i in e.parameters) {
record = 'parameter: ' + i + ' = ' + e.parameters[i];
sheet.getRange(sheet.getLastRow() + 1, 1, 1, 1).setValue(record);
}
var output = ContentService.createTextOutput();
output.setContent("content to return");
return output;
}
function myFunction() {
var url = '<url of above script webapp, set to anonymous, anyone>';
var payload = {payloadToSend : 'string to send'};
var method = 'post'
var response = UrlFetchApp.fetch(url, {method : method, payload: payload}).getContentText();
Logger.log(response);
return;
}
答案 0 :(得分:4)
问题似乎是提供ContentService内容的域“script.googleusercontent.com”不允许使用POST方法。当doPost()处理程序返回TextOuput时,它会将重定向发送回客户端,这会导致客户端再次将POST发送到script.googleusercontent.com,这是不允许的。
如果您可以使用GET,那么这将是推荐的解决方案。如果没有,您可能需要将工作分成两部分:首先进行POST而不进行响应,然后GETting以检索响应。
更新:截至2012年9月21日,此问题现在应该已修复,您可以在没有任何错误的情况下发布到网址。